我正在使用bs4从ebay上的商品信息中提取信息以获取产品的详细信息,我正在尝试使用this列表生成结果作为示例,我感觉最多的代码准确如下:
from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, 'html.parser')
attributes = page_soup.findAll("div",{'class':'itemAttr'})
attribute = attributes [0]
row = attribute.tr.contents
想法是,拉动网页,解析相应的div(itemattr),并尝试使用tr / td标签或其组合从此处提取内容。上面没有包括我的工作的多种变化,但我可以看到我点击解析的障碍产生一个列表(有一个项目),并通过此列表导航遇到路障。我确实看过直接解析表,但不幸的是他们没有给它一个类。我想知道是否有关于如何从div标签中提取表格的想法,或者可能是从解析创建一个新的html子集(而不是列表?)。或者告诉我,如果我疯了,应该去睡觉。
答案 0 :(得分:2)
我认为你现在的工作很有意义,干得好!
为了继续前进,我们可以利用eBay页面上td
元素的结构,以及它们在标题上带有attrLabels
类的两个元素来提取特定数据。
这将为您提供与页面上显示的顺序相同的数据:
tds = attribute.findAll("td")
ordered_data = []
for i in range(0, len(tds), 2):
if tds[i].get('class') == ['attrLabels']:
key = tds[i].text.strip().strip(":")
value = tds[i+1].span.text
ordered_data.append({ key: value })
这给了你相同的东西,但在带有键值对的字典中,这样你就可以轻松访问每个属性:
tds = attribute.findAll("td")
searchable_data = {}
for i in range(0, len(tds), 2):
if tds[i].get('class') == ['attrLabels']:
key = tds[i].text.strip().strip(":")
value = tds[i+1].span.text
searchable_data[key] = value