【发布时间】:2016-02-13 04:34:55
【问题描述】:
scrapy 新手,请多多包涵。
首先,这是我的代码:
from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from usdirectory.items import UsdirectoryItem
from scrapy.http import Request
class MySpider(BaseSpider):
name = "usdirectory"
allowed_domains = ["domain.com"]
start_urls = ["url_removed_sorry"]
def parse(self, response):
hxs = HtmlXPathSelector(response)
titles = hxs.select('//*[@id="holder_result2"]/a[1]/span/span[1]/text()').extract()
for title in titles:
item = UsdirectoryItem()
item["title"] = title
item
yield item
这行得通...但它只抓取第一个项目。
我注意到在我试图抓取的项目中,每行的 Xpath 都会发生变化。例如,第一行是您在上面看到的 xpath:
//*[@id="holder_result2"]/a[1]/span/span[1]/text()
然后它增加 2,一直到 29。所以第二个结果:
//*[@id="holder_result2"]/a[3]/span/span[1]/text()
最后结果:
//*[@id="holder_result2"]/a[29]/span/span[1]/text()
所以我的问题是如何让脚本获取所有这些,我不在乎是否必须为每个项目复制和粘贴代码。所有其他页面完全相同。我只是不知道该怎么做。
非常感谢。
编辑:
import scrapy
from scrapy.item import Item, Field
class UsdirectoryItem(scrapy.Item):
title = scrapy.Field()
【问题讨论】:
-
这可能是您问题中的代码格式问题,但一个问题是“yield item”需要在“for title”循环内。仅在“解析”结束时产生一个收益,您只会得到 1 项返回
标签: python xpath web-scraping scrapy