gpt4 book ai didi

python - 在网页抓取时,当尝试计算页面上的项目数量时,即使有超过 1 个项目,我也会得到 1

转载 作者:行者123 更新时间:2023-12-01 09:27:52 24 4
gpt4 key购买 nike

我是网络抓取新手,我正在尝试网络抓取页面作为练习。在某一时刻,我试图计算具有特定类名的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com