作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是网络抓取新手,我正在尝试网络抓取页面作为练习。在某一时刻,我试图计算具有特定类名的 HTML div 的数量。即使当我检查页面时有多个,但在使用 len() 函数时它只计算一个。代码如下
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
my_url = 'random_url'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.findAll("div", {"class":"row"})
len(containers)
最后,当我可以在浏览器中清楚地看到多个容器时,len(containers)
只返回一个。
任何帮助将不胜感激。预先感谢您。
最佳答案
地址信息是使用 javascript 创建的,因此如果不使用 selenium 等自动化网络浏览器,您将无法通过 HTML 读取信息。
在您的情况下,所有地址信息实际上都以 JSON 形式返回到该页面,因此您需要做的就是重新创建浏览器为获取数据而进行的调用并使用它:
from urllib.request import urlopen as uReq
import json
import re
my_url = 'https://www.haart.co.uk/umbraco/api/branches/getsales/HRT'
uClient = uReq(my_url)
page_json = uClient.read()
uClient.close()
addresses = json.loads(page_json)
for address in addresses:
print(address['headline'])
print(re.sub(r'\<.*?\>', '', address['address']))
print(address['email'].strip())
print(address['telephone'])
print()
这将显示以下地址:
Abbots Langley Estate Agents
haart Abbots Langley,30 High Street,Abbots Langley,Hertfordshire,WD5 0AR.
abbots.langley@haart.co.uk
01923 269444
Arnold Estate Agents
Arnold haart,12 Croft Street,Arnold,Nottinghamshire,NG5 7DX.
arnold@haart.co.uk
0115 926 8877
Ashford (Kent) Estate Agents
haart Ashford (Kent),3-4 Kings Parade, High Street,Ashford, Kent, TN24 8TA.
ashfordkent@haart.co.uk
01233 620340
这使用正则表达式来删除地址内额外的 HTML 格式标记。
如果您使用浏览器的网络工具,您可以看到该页面发出的所有请求。其中,您应该能够看到 JSON 格式的地址。然后,您可以查看为获取该数据而发出的请求。
关于python - 在网页抓取时,当尝试计算页面上的项目数量时,即使有超过 1 个项目,我也会得到 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50219247/
我是一名优秀的程序员,十分优秀!