gpt4 book ai didi

python - beautifulsoup 未显示所有元素

转载 作者:行者123 更新时间:2023-12-01 02:45:39 24 4
gpt4 key购买 nike

我正在尝试使用 BeautifulSoup.find 解析淘宝网站并获取有关商品的信息(照片、文本和链接),但它没有找到所有类。

url='https://xuanniwen.world.tmall.com/category-1268767539.htm?search=y&catName=%BC%D0%BF%CB#bd&view_op=citations_histogram'

def get_html(url):
r = requests.get(url)
return r.text

html=get_html(url)
soup=BeautifulSoup(html, 'lxml')
z=soup.find("div",{"class":"J_TItems"})

z-为空。但例如:

z=soup.find("div",{"class":"skin-box-bd"})
len(z)
Out[196]: 3

工作正常

为什么这个方法不起作用?我应该怎么做才能获得有关good的所有信息?我正在使用 python 2.7

最佳答案

所以,看起来你想要解析的项目是由 JavaScript 动态构建的,这就是 soup.text.find("J_TItems") 的原因。返回-1 ,即文本中根本没有“J_TItems”。你可以做的是使用 selenium 带有 JS 解释器,对于 headless 浏览,您可以使用 PhantomJS 像这样:

from bs4 import BeautifulSoup
from selenium import webdriver

url='https://xuanniwen.world.tmall.com/category-1268767539.htm?search=y&catName=%BC%D0%BF%CB#bd&view_op=citations_histogram'

browser = webdriver.PhantomJS()
browser.get(url)
html = browser.page_source

soup = BeautifulSoup(html, 'html5lib') # I'd also recommend using html5lib
JTitems = soup.find("div", attrs={"class":"J_TItems"})

请注意,您想要的项目位于 <div class="item4line1"> 定义的每一行内,其中有 5 个(您可能只需要前三个,因为其他两个并不真正在主搜索内,过滤应该不难,一个简单的 rows = rows[2:] 就可以了):

rows = JTitems.findAll("div", attrs={"class":"item4line1"})
>>> len(rows)
5

现在请注意,您在问题中提到的每个“好”都在 <dl class="item"> 内。 ,所以你需要将它们全部放在 for 中循环:

Goods = []    
for row in rows:
for item in row.findAll("dl", attrs={"class":"item"}):
Goods.append(item)

剩下要做的就是获取您提到的“照片、文本和链接”,并且可以通过访问 Goods 中的每个项目轻松完成此操作。列表,通过检查你可以知道如何获取每一项信息,例如,对于图片url,简单的一行就是:

>>> Goods[0].find("dt", class_='photo').a.img["src"]
'//img.alicdn.com/bao/uploaded/i3/TB19Fl1SpXXXXbsaXXXXXXXXXXX_!!0-item_pic.jpg_180x180.jpg'

关于python - beautifulsoup 未显示所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45280179/

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