Python Scrapy Spider:结果不一致

时间:2016-08-08 15:46:18

标签: python css-selectors scrapy

我很想知道你们对此的看法。我已经研究了几天,我似乎无法找到我出错的地方。任何帮助将受到高度赞赏。

我想系统地抓取此网址:Question site使用分页抓取其余网页。

我目前的代码:

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.selector import Selector
from scrapy.spiders import CrawlSpider, Rule

from acer.items import AcerItem


class AcercrawlerSpider(CrawlSpider):
    name = 'acercrawler'
    allowed_domains = ['studyacer.com']
    start_urls = ['http://www.studyacer.com/latest']

    rules = (
        Rule(LinkExtractor(), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        questions= Selector(response).xpath('//td[@class="word-break"]/a/@href').extract()

        for question in questions:
            item= AcerItem()
            item['title']= question.xpath('//h1/text()').extract()
            item['body']= Selector(response).xpath('//div[@class="row-fluid"][2]//p/text()').extract()
            yield item

当我运行蜘蛛时,它不会抛出任何错误,而是输出不一致的结果。有时两次抓文章页面。我认为它可能与我使用的选择器有关,但我不能再进一步缩小它。对此有何帮助?

1 个答案:

答案 0 :(得分:0)

凯文;我今天早些时候遇到了一个类似但略有不同的问题,我的爬虫正在访问不需要的页面。有人回答了我的问题,建议按照你的建议检查linkextractor:http://doc.scrapy.org/en/latest/topics/link-extractors.html

class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), deny_extensions=None, restrict_xpaths=(), restrict_css=(), tags=('a', 'area'), attrs=('href', ), canonicalize=True, unique=True, process_value=None)

我最终审核了允许/拒绝组件,以便将抓取工具集中到特定的页面子集上。您可以指定使用正则表达式来表示允许(包含)或拒绝(排除)链接的相关子字符串。我使用http://www.regexpal.com/

测试了表达式

我发现这种方法足以防止重复,但如果你仍然看到它们,我也发现这篇文章我当天早些时候正在研究如何防止重复,虽然我不得不说我没有必须实现此修复:

Avoid Duplicate URL Crawling

https://stackoverflow.com/a/21344753/6582364