Python 爬行蜘蛛罐';在Scrapy中不解析多页
我创建的爬行蜘蛛工作不正常。它解析第一页,然后停止,而不继续下一页。我做错了,但无法察觉。希望有人能给我一个提示,我该怎么做才能纠正它 “items.py”包括:Python 爬行蜘蛛罐';在Scrapy中不解析多页,python,scrapy,Python,Scrapy,我创建的爬行蜘蛛工作不正常。它解析第一页,然后停止,而不继续下一页。我做错了,但无法察觉。希望有人能给我一个提示,我该怎么做才能纠正它 “items.py”包括: from scrapy.item import Item, Field class CraigslistScraperItem(Item): Name = Field() Link = Field() 爬行蜘蛛名称为“craigs.py”,其中包含: from scrapy.contrib.spiders impor
from scrapy.item import Item, Field
class CraigslistScraperItem(Item):
Name = Field()
Link = Field()
爬行蜘蛛名称为“craigs.py”,其中包含:
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from craigslist_scraper.items import CraigslistScraperItem
class CraigsPySpider(CrawlSpider):
name = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = (
'http://sfbay.craigslist.org/search/npo/',
)
rules=(Rule(LinkExtractor(allow = ('sfbay\.craigslist\.org\/search\/npo/.*',
),restrict_xpaths = ('//a[@class="button next"]')),callback = 'parse',follow = True),)
def parse(self, response):
page=response.xpath('//p[@class="result-info"]')
items=[]
for title in page:
item=CraigslistScraperItem()
item["Name"]=title.xpath('.//a[@class="result-title hdrlnk"]/text()').extract()
item["Link"]=title.xpath('.//a[@class="result-title hdrlnk"]/@href').extract()
items.append(item)
return items
最后,我用来获取CSV输出的命令是:
scrapy crawl craigs -o items.csv -t csv
顺便说一句,我首先尝试使用“parse_item”,但没有找到响应,这就是为什么我使用了“parse”方法。提前感谢。使用scrapy.CrawlSpider时,不要命名回调方法
parse
。
来自Scrapy:
在编写爬网爬行器规则时,避免使用解析作为回调,因为
爬行爬行器使用解析方法本身来实现其逻辑。
因此,如果重写解析方法,爬网爬行器将不再
工作
此外,您不需要将项目附加到列表中,因为您已经在使用并且可以简单地生成项目。
此代码应适用于:
# -*- coding: utf-8 -*-
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
from craigslist_scraper.items import CraigslistScraperItem
class CraigsPySpider(CrawlSpider):
name = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = (
'http://sfbay.craigslist.org/search/npo/',
)
rules = (
Rule(LinkExtractor(allow=('\/search\/npo\?s=.*',)), callback='parse_item', follow=True),
)
def parse_item(self, response):
page = response.xpath('//p[@class="result-info"]')
for title in page:
item = CraigslistScraperItem()
item["Name"] = title.xpath('.//a[@class="result-title hdrlnk"]/text()').extract_first()
item["Link"] = title.xpath('.//a[@class="result-title hdrlnk"]/@href').extract_first()
yield item
最后,要以csv格式输出,请运行:
scrapy crawl craigs-o items.csv
感谢无数的vold为您所做的甜蜜而富有成效的努力。它工作得非常好。你让我开心。顺便说一下,有两件事我想得到更新。它是如何单击下一页按钮的,因为您没有使用“restrict\u xpaths”选项,第二个结果是每一行填充csv的。我的意思是,每个结果之间有一条线的距离。再次感谢。不客气!嗯,对我来说,使用restrict xpaths
似乎是多余的,因为您已经在allow
中指定了regex参数,这些参数只与next按钮中的url匹配(实际上是两个按钮,但并不相关)。获取完整信息。关于csv输出,我的结果看起来也像是如果你想保存完整的链接,你可以将代码修改为link=title.xpath('.//a[@class=“result title hdrlnk”]/@href')。extract_first()item[“link”]=response.urljoin(link)
我正期待着你刚才所做的事情。再次感谢。