gpt4 book ai didi

python - Scrapy - 将表头(thead)值添加到项目加载器

转载 作者:行者123 更新时间:2023-12-01 05:28:38 26 4
gpt4 key购买 nike

我有一个网页,其中包含多个表格,我希望使用 Scrapy 抓取这些表格:

<table>
<thead>
<tr>
<th>
<a>Heading1</a>
</th>
</tr>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="#">Name1</a></td>
<td>Description1</td>
<td>Number1</td>
</tr>
<tr>
<td><a href="#">Name2</a></td>
<td>Description2</td>
<td>Number2</td>
</tr>

...

</tbody>
</table>

一页上有很多类似上面的表格。

我正在使用项目加载器来存储循环遍历每一行的数据,抓取:

  • 姓名
  • 描述
  • 数量

Scrapy 蜘蛛如下:

class MySpider(BaseSpider):
...

def parse(self, response):
hxs = HtmlXPathSelector(response)
tb = hxs.xpath('//table')

for td in tb.xpath('.//tbody/tr'):
il = WebsiteLoader(response=response, selector=td)

il.add_xpath('name', 'td/a/text()')
il.add_xpath('description', 'td[1]/text()')
il.add_xpath('number', 'td[2]/text()')

yield il.load_item()

这非常有效,我可以在页面上同一表的所有实例上用每一行数据填充我的项目加载器。

但是,我的问题是:

How can I add a 4th field to my Item Loader, that contains the 'Heading' text for each table that I scrape?

提前感谢您的帮助!

<小时/>

编辑

这是我当前可以抓取的数据示例:

Name1 | Description1 | Number1
Name2 | Description2 | Number2
...

# and so forth for the other table instances:

Name3 | Description3 | Number3
Name4 | Description4 | Number4
...

这就是我想要的:

Name1 | Description1 | Number1 | Heading1
Name2 | Description2 | Number2 | Heading1
...

# and so forth for the other table instances:

Name3 | Description3 | Number3 | Heading2
Name4 | Description4 | Number4 | Heading2
...

最佳答案

我希望我理解正确,也许是这样的:

def parse(self, response):
hxs = HtmlXPathSelector(response)
for tb in hxs.xpath('//table'):

heading = tb.xpath('.//thead/tr/th/a/text()').extract()[0]

for td in tb.xpath('.//tbody/tr'):
il = WebsiteLoader(response=response, selector=td)
...
il.add_value('heading', heading)
yield il.load_item()

关于python - Scrapy - 将表头(thead)值添加到项目加载器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20821792/

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