我正在尝试用Scrapy构建一个scraper。我的总体目标是刮取一个网站的网页,并返回不同页面的所有可下载文档的链接列表。
不知何故,我的代码只返回None。我不确定这可能是什么原因。提前感谢您的帮助。请注意,robots.txt不会导致此问题。
import re
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from w3lib.url import url_query_cleaner
def processlinks(links):
for link in links:
link.url = url_query_cleaner(link.url)
yield link
class ExampleCrawler(CrawlSpider):
name = 'example'
allowed_domains = ['www.example.com']
start_urls = ["https://example.com/"]
rules = (
Rule(
LinkExtractor(
deny=[
re.escape('https://www.example.com/offsite'),
re.escape('https://www.example.com/whitelist-offsite'),
],
),
process_links=processlinks,
callback='parse_links',
follow=False
),)
def parse_links(self, response):
html = response.body
links = scrapy.Selector(text=html).xpath('//@href').extract()
documents = []
for link in links:
absolute_url = urljoin(response.url, link)
documents.append(absolute_url)
return documents
我期望收到一个包含网站所有网页的所有文档下载链接的列表。我只得到一个None值返回。看起来parse_links方法没有被调用。
1条答案
按热度按时间fivyi3re1#
代码中有一些逻辑和技术问题。我已经对代码进行了修改。下面是详细信息。
您的站点被重定向到另一个站点,因此您需要更新允许的域并向其添加www.iana.org。
其次,在scrappy中,你不能返回一个列表或字符串,它应该是一个表单或字典中的请求或团队。