Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一个div中解析表很漂亮_Python_Beautifulsoup - Fatal编程技术网

Python 在一个div中解析表很漂亮

Python 在一个div中解析表很漂亮,python,beautifulsoup,Python,Beautifulsoup,我正在使用bs4从易趣上的物品中提取信息以获取产品的详细信息,我正在尝试以物品为例生成一个结果,我觉得最准确的代码如下: 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'

我正在使用bs4从易趣上的物品中提取信息以获取产品的详细信息,我正在尝试以物品为例生成一个结果,我觉得最准确的代码如下:

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标记中提取一个表,或者从parse中创建一个新的html子集(而不是列表?),是否有什么想法。或者告诉我我是不是疯了,该上床睡觉了。

我认为你目前的工作很有意义,干得好

要继续前进,我们可以利用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 })
这将为您提供相同的功能,但在具有键值对的dict中,您可以轻松访问每个属性:

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

先生,你是人类中的神,这是完美的。我要打破这个,然后再打破它来掌握窍门。非常感谢!