python - scrapy python CrawlSpider不爬行
问题描述
import scrapy
from scrapy.spiders.crawl import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor
class MySpider(CrawlSpider):
name = 'genericSpider'
allowed_domains = ['example.com']
start_urls = [url_1, url_2, url_3]
rules = [
Rule(
LinkExtractor(),
callback='parse',
follow=True
),
]
def parse(self, response):
hxs = scrapy.Selector(response)
links = hxs.xpath('*//a/@href').extract()
for link in links:
print(link)
print()
我正在尝试抓取一个网站。对于我的代码示例,我只是提取所有链接并将它们打印到终端。
此过程对 start_urls 中的 url 非常有效,但蜘蛛似乎不会抓取提取的 url。
这就是 CrawlSpider 的重点,对吗?访问一个页面,收集它的链接并访问所有这些链接,直到它用完它们?
我已经被困了几天,任何帮助都会很棒。
解决方案
问题是你命名你的方法parse
。根据文档,应避免使用此名称,CrawlSpider
因为它会导致问题。只需将方法重命名为 eg parse_link
(并调整 中的callback
参数Rule
),它就会起作用。
此外,请记住该allowed_domains
属性必须与您要抓取的 URL 匹配。
推荐阅读
- mvvm - 为什么观察 LiveData 时不调用 onChanged()
- sql - 仅获取日期时间列的日期部分
- python - Pyinstaller可以使用其他文件夹中的数据执行吗?
- r - r 平均列表的元素
- java - 无法使用 Spring Batch 框架连接到 Oracle 数据源
- ruby-on-rails - 如何在更新之前拒绝 Rails 5 中的初始化嵌套关联?
- sql - 如何在postgres选择中获取第一次出现数字的位置
- javascript - 从具有多种场景的javascript中的字符串中删除子字符串
- ios - 对核心数据执行提取时间歇性崩溃
- mysql - SQL WHERE 子句逻辑不匹配