scrapy - 在 HomePage + 其他提取的链接上制作 CrawlSpider Process 数据
问题描述
我正在做一个广泛的爬行。我需要为每个网站处理几个页面,以便为大约 20 个分类规则之一设置值。例如,一个分类规则是“有电话号码”(运行正则表达式以查看页面源中是否有电话号码并返回布尔值)。这些规则在一个名为 parse_page() 的函数中实现。
我需要 CrawlSpider 在每个爬取网站的主页上运行 parse_page() 以及其他常见页面,例如关于页面、联系页面、隐私政策页面等。
当我运行蜘蛛时,它从 some-site.com 开始,并根据下面代码中的规则定义抓取页面。
我的问题在于我需要 parse_page() 在 some-site.com 的主页上运行(parse_page() 目前只在 some-site.com/contact-us、some-site.com/about-us 等上运行.)。那么我的问题是:如何指定 Rule() 以包含网站的主页,以便主页以及已包含的其他页面调用 parse_page() ?
class SomeBotSpider(scrapy.spiders.CrawlSpider):
name = 'some_bot'
allowed_domains = ['some-site.com']
start_urls = ['https://some-site.com/']
rules = (
Rule(LinkExtractor(allow='/contact'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='disclaimer'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='disclosure'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='/about'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='privacy'), callback='parse_page', follow=True),
)
解决方案
您需要覆盖parse_start_url
蜘蛛的方法。对网站(主页 url)的第一个请求由parse_start_url
方法处理。您可以在方法parse_page
内部调用parse_start_url
。像这样的东西:
class SomeBotSpider(scrapy.spiders.CrawlSpider):
name = 'some_bot'
allowed_domains = ['some-site.com']
start_urls = ['https://some-site.com/']
rules = (
Rule(LinkExtractor(allow='/contact'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='disclaimer'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='disclosure'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='/about'), callback='parse_page', follow=True),
Rule(LinkExtractor(allow='privacy'), callback='parse_page', follow=True),
)
def parse_start_url(self, response):
return self.parse_page(response)
希望能帮助到你。
推荐阅读
- regex - 将pandas单元格中靠近第n个字符位置的长字符串拆分为多个单元格而不拆分单词
- oracle - 查询分组,并在两个不同的列中获取结果
- sql - 大型数据库上的慢速 SQL 查询
- javascript - 下拉子菜单不会保持打开状态
- php - PHP:如何使用 cURL 获取网站并像真正的浏览器一样工作?
- java - 使用属性设置枚举值
- macos - 我在哪里可以找到我的 NSCocoaErrorDomain 描述?
- jira - JIRA - Excel 报告包含问题进入特定状态的日期(尝试计算周期时间)
- android - 尝试从服务器获取数据时出现 Android URL 和 HttpURLConnection 异常
- python - 更新矩形的位置