【发布时间】:2015-04-13 17:35:27
【问题描述】:
我试图在 scrappy 中抓取一个以上的页面,我的函数确实返回了第一个起始 url,但我无法使蜘蛛的规则工作。
这是我目前所拥有的:
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from craigslist_sample.items import CraigslistSampleItem
class MySpider(CrawlSpider):
name = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = ["http://sfbay.craigslist.org/npo/"]
rules = (
Rule(SgmlLinkExtractor(allow=('.*?s=.*',), restrict_xpaths('a[@class="button next"]',)), callback='parse', follow=True),)
def parse(self, response):
for sel in response.xpath('//span[@class="pl"]'):
item = CraigslistSampleItem()
item['title'] = sel.xpath('a/text()').extract()
item['link'] = sel.xpath('a/@href').extract()
yield item`
我收到这个错误
SyntaxError: 关键字 arg 后的非关键字 arg
更新:
感谢下面的回答。没有语法错误,但是我的爬虫只是停留在同一个页面,不爬。
更新代码
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from craigslist_sample.items import CraigslistSampleItem
from scrapy.contrib.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name = "craigs"
allowed_domains = ["craigslist.org"]
start_urls = ["http://sfbay.craigslist.org/npo/"]
rules = (Rule(SgmlLinkExtractor(allow=['.*?s=.*'], restrict_xpaths=('a[@class="button next"]')),
callback='parse', follow=True, ),
)
def parse(self, response):
for sel in response.xpath('//span[@class="pl"]'):
item = CraigslistSampleItem()
item['title'] = sel.xpath('a/text()').extract()
item['link'] = sel.xpath('a/@href').extract()
yield item
【问题讨论】:
-
应该是
restrict_xpaths=('a[@class="button next"]',))?看起来你可能忘记了=。 -
是的,我检查并修复了语法错误,但仍然没有抓取其他页面。
标签: python syntax-error scrapy