Web scraping 如何使用爬行器设置下一页规则?
我正在从网站上搜刮电子邮件地址。为了做到这一点,我必须提取列表中的每一个链接,然后在提取页面上提取电子邮件地址。问题是下一页按钮最多有50个。但是如果我用斜杠修改url并输入51。它也会进入一个新页面。我想使用for循环作为下一页的链接。例如,我将使用for循环从1到999,它将更新下一页的url。下面是我的代码。只要下一页按钮可用,它就可以正常工作Web scraping 如何使用爬行器设置下一页规则?,web-scraping,scrapy,web-crawler,Web Scraping,Scrapy,Web Crawler,我正在从网站上搜刮电子邮件地址。为了做到这一点,我必须提取列表中的每一个链接,然后在提取页面上提取电子邮件地址。问题是下一页按钮最多有50个。但是如果我用斜杠修改url并输入51。它也会进入一个新页面。我想使用for循环作为下一页的链接。例如,我将使用for循环从1到999,它将更新下一页的url。下面是我的代码。只要下一页按钮可用,它就可以正常工作 # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors impor
# -*- 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(),
}
在“开始请求”功能中检查您的url。这是不对的。我想你的意思是:“
规则
将对爬行器通过的每个链接执行(默认情况下,它将避免重复请求),因此不需要使用for循环。我正在删除的网站有50多个页面要删除,但当我禁用Java脚本时,它在分页扇区上只显示50个页面。如果我能够手动使用for循环,我将能够废弃所有页面。有办法吗?请让我知道。scrapy不会自动渲染JS,您可以使用Splash来渲染它,或者使用for循环来代替规则,或者最终选择Seleniumhow来使用for循环?请告诉我好吗?