python - 为什么我的 linkExtractor 在 scrapy 蜘蛛中伪装成不抓取允许的链接?

标签 python python-2.7 xpath web-scraping scrapy

我创建了一个简单的蜘蛛来抓取 disneyfoodblog.com 帖子并返回帖子标题和帖子永久链接。

我的项目没有显示任何错误。调试输出(见下文)显示所有起始链接都被访问,但这些页面上没有链接被爬网。起始页是包含每天帖子的页面。从那里,我尝试抓取实际的帖子。

我的蜘蛛代码:

import datetime

import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule 
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy import log

from dfbScrape.items import *


class dfbSpider(CrawlSpider):
    name="dfb"
    base="http://disneyfoodblog.com/"
    allowed_domains=[base]

    start_urls=[]
    startDate=datetime.date(2014,6,1)
    endDate=datetime.date.today()
    while startDate<endDate:
        start_urls.append(base+str(startDate.year)+"/"+startDate.strftime("%m")+"/"+startDate.strftime("%d")+"/")
        startDate+=datetime.timedelta(days=1)

    rules = [Rule(SgmlLinkExtractor(allow=["\d+/\d+/\d+/.+/"]), callback='parse_item')]

    def parse_item(self, response):
        self.log('Hi, this is an item page! %s' % response.url)
        item =DfbscrapeItem()
        item['title']=response.xpath('/html/body/div[3]/div[3]/div/div/main/article/header/h1').extract()
        item['link']=response.url
        print "t: %s l: %s" % (item['title'],item['link'])
        return item

调试输出可以在 pastebin 上查看.

请告诉我是否应该在此处包含实际输出。我没有,因为它几乎有 800 行长。

我唯一的想法是恕我直言,这不是一个很好的想法。这可能是已弃用的链接提取器的问题。我选择这个而不是 lxml 是因为我没有找到使用 lxml 的示例,而且有很多使用旧的示例。即使您无法回答我的问题,lxml 的优点和示例也非常值得赞赏。一如既往,欢迎建设性的批评和编辑。请询问您需要的任何其他信息。

最佳答案

如果您更仔细地查看输出,您会看到“Filtered offsite request”消息:

2015-06-07 10:00:01-0500 [dfb] DEBUG: Filtered offsite request to 'www.disneyfoodblog.com': http://www.disneyfoodblog.com/2013/03/26/best-disney-world-restaurants-for-first-time-disney-visitors/>

这意味着“链接提取器”完成了它的工作。

但是,您的 allowed_domains 设置未正确定义,应定义为:

allowed_domains = ["www.disneyfoodblog.com"]

(为我工作)。

关于python - 为什么我的 linkExtractor 在 scrapy 蜘蛛中伪装成不抓取允许的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30697468/

相关文章:

java - 如何查找所有子节点的文本

python - 以 Django 形式插入标题

python - 如何使用flask_msearch配置诸如模糊性之类的参数?

python - geoJSON:如何创建具有动态数量特征的FeatureCollection?

python - 如何决定单击哪个单选按钮

java - 端口 SecretKeySpec Java 代码转换为 Python27

python - 无法在 WSL 中安装或升级 Python 3.10.8

python - 用于在类文件对象中发送 HTTP 请求的库

rest - Codeception - 如何检查响应与 xpath 不匹配

xpath - 我对 XPath 轴的理解正确吗?