python - 抓取多个 URL 时,我在 Python 中的 Scrapy 代码不一致
问题描述
抓取多个 URL 时,我在 Python 中的 Scrapy 代码不一致。下面是一个打印屏幕,您可以在其中看到某些 url 无法抓取,而其他 url 则可以。
下面是我的代码:
import scrapy
from scrapy_splash import SplashRequest
from scrapy_spider.items import ScrapySpiderItem
pages=0
urllist=[]
class SystemspiderSpider(scrapy.Spider):
name = "systemspider"
#start_urls = ["https://www.systembolaget.se/sok/?
categoryLevel1=Vin&categoryLevel2=Ros%C3%A9vin&page=1"]
while pages < 667:
pages = pages+1
urllist.append(f"https://www.systembolaget.se/sok/?
categoryLevel1=Vin&page={pages}")
start_urls = urllist
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url=url, callback=self.parse, endpoint='render.html')
## div > div > a > div.css-6ktubd > div.css-1rfq2pv > div.css-1mhygto > div.css-1eo7gke > div.css-1iyoj2o > h4
def parse(self, response):
print("Response")
if response.css('#captchacharacters').extract_first():
print("-------------------------------------Captcha found------------------------------------------------------------")
for q in response.css("div > div > a > div.css-6ktubd > div.css-1rfq2pv > div.css-1mhygto > div.css-1eo7gke > div.css-1iyoj2o"):
#print(q)
quote = ScrapySpiderItem()
quote["author"] = q.css("div > h3 > span.css-uiubfo::text").extract_first()
quote["quote"] = response.url
yield quote
解决方案
Scrapy 是异步框架。
来自您的代码的请求具有相同的优先级。这意味着默认情况下,这里不保证请求会以严格的顺序(page1、page2、page3 等)被调度和执行。
可以通过从parse
方法中一一调度请求来解决:
def start_requests(self):
url = "https://www.systembolaget.se/sok/?categoryLevel1=Vin&page=1"
yield SplashRequest(url=url, callback=self.parse, endpoint='render.html')
def parse(self, response):
print("Response")
....
next_page_url =... #url for next page
if next_page_url:
yield SplashRequest(url=url, callback=self.parse, endpoint='render.html')
推荐阅读
- android - 在 Kotlin 中使用 check 验证字符串失败
- sql - Postgres 查询替换 CTE 查询
- python - Apache Beam Python 3.x 方法范围
- java - 我在 Pattern.compile() 和 .matcher() 中传递变量,但没有获得所需的输出
- r - 从终端渲染时选项卡不起作用
- rest - REST - POST 并不总是创建新资源时的棘手示例
- flask - 使用flask-socketio从网络摄像头流式传输到服务器
- python - Python regex 找不到特定模式
- sql - 让一列 ID 只是一个整数(自动增量)是否安全?
- assembly - gdb:在源代码和 asm 中显示相应的行