web-scraping - 如何使用 CrawlSpider 设置下一页规则?
问题描述
我正在从网站上抓取电子邮件地址。为了做到这一点,我必须提取列表中的每个链接,然后在该提取页面上提取电子邮件地址。问题是下一页按钮最多可达 50。但如果我用斜杠更改 url 和输入 51。它也进入一个新页面。我想使用 for 循环作为下一页链接。例如,我将使用从 1 到 999 的 for 循环,它将更新下一页 url。下面是我的代码。只要 next_page 按钮可用,它就可以正常工作。
# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
class BestMoviesSpider(CrawlSpider):
name = 'best_movies'
allowed_domains = ['dastelefonbuch.de']
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36'
def start_requests(self):
yield scrapy.Request(url='https://www.dastelefonbuch.de/Suche/Textilien%20Gmbh',
headers={
'User-Agent': self.user_agent
})
rules = (
Rule(LinkExtractor(
restrict_xpaths="//a[@class=' name']"),
callback='parse_item', follow=True,
process_request='set_user_agent'),
Rule(LinkExtractor(
restrict_xpaths="//a[@class='nextLink next'][2]"), follow=True,
process_request='set_user_agent')
)
def set_user_agent(self, request):
request.headers['User-Agent'] = self.user_agent
return request
def parse_item(self, response):
yield {
'email': response.xpath(
"//a[starts-with(@href,'mailto')]/@href").get(),
}
解决方案
在 start_requests 函数中检查您的 url。这是不正确的。我想你的意思是:“ https://www.dastelefonbuch.de/Suche/Textilien ”
推荐阅读
- angular - 父子组件通信
- javascript - 将 JSON 重复数据转换为对象数组的 JS 库
- python-3.x - 在 GPU 上运行我的 Tensorflow 模型的问题
- azure-application-insights - 是否有用于连接并从 Java 应用程序获取 Azure AppInsight 服务指标和配额信息的 java sdk 和示例?
- unit-testing - Flutter:测试共享偏好
- google-cloud-platform - 如何从 Google 云解锁我的 Google Play 帐户
- haskell - 在 Haskell 中转换后创建字符串列表的问题
- c - 用C语言交换号码系统?
- typescript - 打字稿中的自定义 npm 包:找不到自定义接口的名称
- .htaccess - Apache 2.4 重写 url