【发布时间】:2015-04-17 10:41:45
【问题描述】:
如果我不更改函数解析,这段代码工作得非常好。然后如果我想抓取网站上的所有内容,那么它会停止工作并且不返回任何查询。帮助我编写抓取规则。
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.selector import Selector
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from urlparse import urljoin
class CompItem(scrapy.Item):
title = scrapy.Field()
link = scrapy.Field()
data = scrapy.Field()
name = scrapy.Field()
date = scrapy.Field()
class criticspider(CrawlSpider):
name = "mmt"
allowed_domains = ["consumercomplaints.in"]
start_urls = ["http://www.consumercomplaints.in/?search=make-my-trip"]
rules = (
Rule(
SgmlLinkExtractor(allow=("search=make-my-trip&page=1/+",)),
callback="parse_items",
follow=True),
)
def parse_items(self, response):
sites = response.xpath('//table[@width="100%"]')
items = []
for site in sites:
item = CompItem()
item['name'] = site.xpath('.//td[@class="small"]//a/text()').extract()[0]
item['date'] = site.xpath('.//td[@class="small"]/text()').extract()[1]
item['title'] = site.xpath('.//td[@class="complaint"]/a/span/text()').extract()[0]
item['link'] = site.xpath('.//td[@class="complaint"]/a/@href').extract()[0]
if item['link']:
if 'http://' not in item['link']:
item['link'] = urljoin(response.url, item['link'])
yield scrapy.Request(item['link'],
meta={'item': item},
callback=self.anchor_page)
items.append(item)
def anchor_page(self, response):
old_item = response.request.meta['item']
old_item['data'] = response.xpath('.//td[@class="compl-text"]/div/text()').extract()
yield old_item
【问题讨论】:
-
为另一个单行回调提供此请求是一个奇怪的想法。它的作用不大。只需修改
if语句中的项目并生成它 -
@Marek 没有得到你
-
我误读了代码。忽略我之前的评论。我已经更正了答案
-
这是什么意思:“如果我不改变函数解析”?
-
@StevenAlmeroth 如果我们在使用爬虫时使用 def 解析,它将覆盖它
标签: python web-scraping web-crawler scrapy screen-scraping