Python中学习Scrapy框架遇到问题,求助大牛

我一台 A 服务器作为测试服务器

使用 Centos7 python3.6

我有一台 B 服务器不限带宽安装的是 ubuntu

我现在是想把 A 服务器的 scrapy 环境直接无缝搬运到 B 服务器上。

应该怎么操作?


Python中学习Scrapy框架遇到问题,求助大牛
6 回复

试试 docker ?


Scrapy框架上手确实有个门槛,但核心就那几个组件,理顺了就好办。你具体卡在哪个环节了?是Item定义、Spider逻辑、数据提取还是中间件配置?

我猜最常见的是数据提取问题。Scrapy主要用CSS和XPath选择器,很多人一开始不习惯。比如用response.css('div.title::text').get()response.xpath('//div[@class="title"]/text()').get()更简洁。如果页面有动态加载,得用Selenium中间件或者直接找API接口。

另一个常踩的坑是请求去重和并发控制。默认的DUPEFILTER_CLASS会自动过滤重复URL,但自定义时需要重写request_fingerprint方法。并发数别瞎调,CONCURRENT_REQUESTS设太高容易被封,一般16-32够用。

管道(Pipeline)写错也常见。记得在process_item里最后一定要return item,不然数据链就断了。数据库操作要放spider_openedspider_closed里初始化连接。

给个最简单的爬虫示例:

import scrapy

class BookSpider(scrapy.Spider):
    name = 'books'
    start_urls = ['http://books.toscrape.com']
    
    def parse(self, response):
        for book in response.css('article.product_pod'):
            yield {
                'title': book.css('h3 a::attr(title)').get(),
                'price': book.css('p.price_color::text').get()
            }
        next_page = response.css('li.next a::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)

先跑通这个,再慢慢加中间件和管道。

调试建议用scrapy shell <url>交互式测试选择器,比直接写爬虫快多了。日志级别设成DEBUG能看到所有请求细节。

把问题具体描述清楚,最好带上代码和错误信息,这样才好针对性解决。

  1. docker
    2. vituenv

typo: virtualenv

pyenv is better than virtualenv, much more

用 virtualenv 建立虚拟环境,或者 docker

加我们的群问效率高些,一群工程师组建的面向初学者的
Python Linux 学习群,qq 群号:278529278,
Php Linux 学习群,qq 群号:476648701,
非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 v2ex

回到顶部