Scrapy SgmlLinkExtractor 无引用

1 投票
1 回答
2594 浏览
提问于 2025-04-17 17:24

我正在尝试让我的爬虫工作。以下是我在爬虫中的代码:

start_urls = ["http://www.khmer24.com/"]   

rules = (
Rule(SgmlLinkExtractor(allow=(r'ad/\w+/67-\d+\.html',),
    ), 
    callback='parse_items'),
)

示例网址看起来是这样的: http://www.khmer24.com/ad/honda-click-2012-98/67-258149.html

我想保留“ad”和“67-”这部分内容。

运行 scrapy crawl khmer24 的输出结果是:

Crawled (200) <GET http://www.khmer24.com/> (referer: None)

我搞不清楚为什么会这样。以下是我的完整代码:

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


class MySpider(CrawlSpider):
    name = "khmer24"
    allowed_domains = ["khmer24.com"]
    start_urls = ["http://www.khmer24.com/"]   

    rules = (
    Rule(SgmlLinkExtractor(allow=(r'ad/\w+/67-\d+\.html',),
        ), 
        callback='parse_items'),
    )

    def parse_items(self, response):
        hxs = HtmlXPathSelector(response)
        titles = hxs.select("//div[@class='innerbox']/h1/text()")
        return(titles)

1 个回答

1

你的问题是:“为什么我的 referer 是 None?

从你的日志输出中可以看到

Crawled (200) <GET http://www.khmer24.com/> (referer: None)

这行信息是来自于 start_urls,而不是链接提取器。默认情况下,从 start_urls 发出的请求不会包含 referer 这个头信息。你可以通过自己发送请求来手动添加头信息,具体可以参考这个文档

撰写回答