我很想知道你们对此的看法。我已经研究了几天,我似乎无法找到我出错的地方。任何帮助将受到高度赞赏。
我想系统地抓取此网址: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
当我运行蜘蛛时,它不会抛出任何错误,而是输出不一致的结果。有时两次抓文章页面。我认为它可能与我使用的选择器有关,但我不能再进一步缩小它。对此有何帮助?
答案 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/
测试了表达式我发现这种方法足以防止重复,但如果你仍然看到它们,我也发现这篇文章我当天早些时候正在研究如何防止重复,虽然我不得不说我没有必须实现此修复: