python - scrapy spider 从链接中随机抓取数据,为什么?
问题描述
首先,我从网站上获取了所有的硬币链接并请求这些链接。但是scrapy不会从链接列表中连续请求。在成功请求链接抓取数据之后,但是当保存到csv文件时,每次成功抓取一个项目后都会生成一个空白行。结果屏幕截图 我希望它会从链接列表中连续请求,并且不会产生任何空白行。我该怎么做?
我正在使用 python 3.6 和 scrapy 版本 1.5.1
我的代码:
import scrapy
class MarketSpider(scrapy.Spider):
name = 'market'
allowed_domains = ['coinmarketcap.com']
start_urls = ['http://coinmarketcap.com/']
def parse(self, response):
Coin = response.xpath('//*[@class="currency-name-container link-secondary"]/@href').extract()
for link in Coin:
absolute_url = response.urljoin(link)
yield scrapy.Request(absolute_url,callback=self.website_link)
def website_link(self,response):
link = response.xpath('//*[@class="list-unstyled details-panel-item--links"]/li[2]/a/@href').extract()
name = response.xpath('normalize-space(//h1)').extract()
yield{'Name': name ,'Link': link}
解决方案
Scrapy 是一个异步框架 - 多个请求同时执行,并在收到响应时对其进行解析。
可靠地控制首先解析哪些响应的唯一方法是关闭此功能,例如通过将CONCURRENT_REQUESTS设置为 1。
但这会使您的蜘蛛效率降低,并且很少需要这种对解析顺序的控制,所以我会如果可能的话,避免它。
Windows 上 csv 导出中的额外换行符是一个已知问题,将在下一个 scrapy 版本中修复。
推荐阅读
- python-3.x - 邮箱帐户。Python 3.8 空闲脚本。错误:smtplib.SMTPSenderRefused: (503, b'5.5.1 EHLO/HELO first
- laravel - 在 Voyager 上,Laravel 策略注册返回 false
- .net - .Net Core MVC | 如何重定向回调用页面
- python - 列元素除以最大
- codenameone - 旧GUI中的主题问题
- c# - 将文本框字符串转换为 int 并传递给数据库
- android-widget - 更新小部件的频率超过 30 分钟
- javascript - Chrome 通知不是“通知”
- c# - 当文件为 .odt 时,WebCliente.DownloadData 给出文件未找到
- linux - 如果我在 docker 容器中运行 sudo dd if=/dev/zero of=/dev/sda 我的主机系统会中断吗?