Python 抓取时,Scrapy crawler只返回URL和引用者

Python 抓取时,Scrapy crawler只返回URL和引用者,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,我对scrapy非常陌生,昨天刚找到它,而且只有基本的python经验 我需要映射一组子域(大约200个),每个内部和外部链接 我只是不理解我所想的事情的输出端 这就是我目前所拥有的 import scrapy 等级LinkSpider(刮擦式Spider): 名称='链接' 允许的_域=['example.com'] 起始URL=['https://www.example.com/'] def解析(自我,响应): #关注所有链接 对于response.css中的href('a::attr(hr

我对scrapy非常陌生,昨天刚找到它,而且只有基本的python经验

我需要映射一组子域(大约200个),每个内部和外部链接

我只是不理解我所想的事情的输出端

这就是我目前所拥有的

import scrapy
等级LinkSpider(刮擦式Spider):
名称='链接'
允许的_域=['example.com']
起始URL=['https://www.example.com/']
def解析(自我,响应):
#关注所有链接
对于response.css中的href('a::attr(href'):
yield response.follow(href,self.parse)
它输出到终端,如下所示:

DEBUG: Crawled (200) <GET http://www.example.com/> (referer: None)
DEBUG: Crawled (200) <GET http://www.example.com/aaa/A-content-page> (referer: http://www.example.com/)
DEBUG: Crawled (200) <GET http://aaa.example.com/bbb/something/> (referer: http://www.example.com/)
任何协助都将不胜感激,但与直接解决方案相比,我们更愿意推荐给文档

这就是我想出的解决办法

def解析(self,response):
filename=“output.tsv”
f=打开(文件名为“w”)
f、 写入(“URL\tLink\tReferer\n”)
f、 关闭()
#关注所有链接
对于response.css中的href('a::attr(href'):
yield response.follow(href,self.parse)
将open(filename,'a')作为f:
url=response.url
links=response.css('a::attr(href)').getall()
referer=response.request.headers.get('referer',None.).decode('utf-8')
对于链接中的项目:
f、 写入(“{0}\t{1}\t{2}\n”。格式(url、项、引用))
f、 关闭()

虽然这不是100%正确,但这是一个很好的开始

    def parse(self, response):
    filename = "output.tsv"
    # follow all links
    for href in response.css('a::attr(href)'):            
        yield response.follow(href, self.parse)
        with open(filename, 'a') as f:
            links = response.css('a::attr(href)').getall()
            referer = response.request.headers.get('Referer', None)
            for item in links:
                f.write("{0}\t{1}\n".format(item, referer))

您可以在解析中简单地获得这两个URL

referer=response.request.headers.get('referer')
original\u url=response.url

yield{'referer':referer'url':original\u url}

您可以使用将输出写入文件

scrapy crawl spider\u name-o bettybarclay.json

    def parse(self, response):
    filename = "output.tsv"
    # follow all links
    for href in response.css('a::attr(href)'):            
        yield response.follow(href, self.parse)
        with open(filename, 'a') as f:
            links = response.css('a::attr(href)').getall()
            referer = response.request.headers.get('Referer', None)
            for item in links:
                f.write("{0}\t{1}\n".format(item, referer))