【发布时间】:2020-09-13 13:02:37
【问题描述】:
首先,感谢您的所有帮助!
...stackoverflow (& python) 的新手 si 我为使用错误的术语道歉:)
我正在使用 Scrapy 从 html 源中提取数据,它使用 Scrapy 的选择器在其 items.py 中创建 dict 字段:
def parse_item(self, response):
item = SiennaautoItem() #instatiating dict
item['attributes'] = response.css('p.attrgroup').extract()
yield item
这会返回一个包含多个值的数组/列表的字典:
> ['<p class="attrgroup">\n\n\n\n <span><b>2014 honda odyssey
> touring elite</b></span>\n <br>\n\n </p>', '<p
> class="attrgroup">\n\n\n\n <span>VIN:
> <b>5FNRL5H66EB107700</b></span>\n <br>\n\n\n\n\n
> <span>condition: <b>like new</b></span>\n <br>\n\n\n\n\n
> <span>cylinders: <b>6 cylinders</b></span>\n <br>\n\n\n\n\n
> <span>drive: <b>fwd</b></span>\n <br>\n\n\n\n\n
> <span>fuel: <b>gas</b></span>\n <br>\n\n\n\n\n
> <span>odometer: <b>99000</b></span>\n <br>\n\n\n\n\n
> <span>paint color: <b>white</b></span>\n <br>\n\n\n\n\n
> <span>size: <b>full-size</b></span>\n <br>\n\n\n\n\n
> <span>title status: <b>clean</b></span>\n <br>\n\n\n\n\n
> <span>transmission: <b>automatic</b></span>\n
> <br>\n\n\n\n\n <span>type: <b>mini-van</b></span>\n
> <br>\n\n </p>']
这是渲染的 html:
['\n\n\n\n 2014本田奥德赛 旅游精英\n
', '\n\n\n\n VIN: 5FNRL5H66EB107700\n
\n\n
\n\n\n\n\n
条件:像新的\n
\n\n\n\n\n
气缸:6 个气缸\n
\n\n\n\n\n 驱动器:fwd\n
\n\n\n\n\n
燃料:gas\n
\n\n\n\n\n
里程表:99000\n
\n\n\n\n\n
油漆颜色:白色\n
\n\n\n\n\n
尺寸:全尺寸\n
\n\n\n\n\n
标题状态:干净\n
\n\n\n\n\n
传输:自动\n
\n\n\n\n\n 类型:小型货车\n
\n \n']
我的问题是,如何删除 html 标签以及如何从 span 标签创建键,它们是:
状况、驾驶、里程表等
我希望从 item[attributes] 返回的值创建自己的 dict 值,例如:
项目[里程表] 项目情况] 等等
非常感谢您的帮助,因为我已经坚持了一段时间!
【问题讨论】:
-
item['attributes'] = response.css('p.attrgroup::text').extract()将只返回元素内的文本。要以您想要的方式提取值,您应该在元素之间循环并使用它们自己的 XPath/CSS 选择器 +::text伪元素来提取每个元素。阅读更多here。 -
所以我尝试这样做,例如
item['MAKE'] = response.xpath('/html/body/section/section/section/div[1]/p[1]/span/b').extract(),但有些用户不会填写每个属性,因此返回的值会更改为不同的 ,例如“条件”。如果 p.attrgroup 中的元素发生变化,我如何确保“make”始终是“make”?...我希望这是有道理的,如果我需要校准,请告诉我! -
我认为link 可能有答案,但如果您能帮助解释如何使用“包含”方式,我将不胜感激......谢谢。我正在谈论的部分是:
response.xpath("//ul@class='clg-info'/li[contains(.,'Ownership')]/span/text().extract() -
如果没有看到 HTML 和/或您的代码,很难为您提供帮助。一般来说,您需要找到一个选择器 xpath/css 来选择类似元素的列表,这些元素将您的字段作为子元素。因此,您可以迭代列表并以更通用的方式提取循环内的数据。
标签: python html web-scraping scrapy spyder