scrapy_爬虫

本文介绍了如何通过命令行下载Scrapy相关依赖,并创建一个新的Scrapy项目。接着展示了如何编写爬虫文件,设置请求头、下载延迟能力以及不遵循robots.txt协议。在settings.py中配置了自定义请求头和下载延迟,并定义了一个简单的管道。爬虫从腾讯视频动漫页面抓取电影名字和描述,通过位移参数实现分页抓取,最后将数据交由管道处理。
摘要由CSDN通过智能技术生成

命令行下载jar包

pip install xxxxxx -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
使用上面的命令下载wheel、lxml、twisted、pywin32、scrapy五个jar包,xxxxxx内填包名
命令行创建项目
scrapy startproject yc yc是项目名
创建py文件
scrapy genspider baidu www.baidu.com baidu是文件名 文件名后写网址
在项目中的settings.py文件里设置:
ROBOTSTXT_OBEY = False 不遵从机器人协议
DOWNLOAD_DELAY = 3 下载延迟3秒,即下载时间最多不超过3秒
默认请求头
DEFAULT_REQUEST_HEADERS={
‘Accept’: ‘text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8’,
‘Accept-Language’:‘en’,
‘User-Agent’:‘Mozilla/5.0(Windows NT 6.2;WOW64)AppleWebKit/537.36(KHTML,like Gecko)Chrome/27.0.1453.94 Safari/537.36’#浏览器的类型,这一行的值要到浏览器里面找。Ctrl+Shift+I打开开发者工具->点击第一行的Network->点击Name下的一个文件名->点击Headers往下滑动即可找到
}
#管道优先级
ITEM_PIPELINES = {
‘TXmovies.pipelines.TxmoviesPipeline’: 300,
}

run.py文件
from scrapy import cmdline
#执行命令行       为什么要以空格分隔分割成列表来执行
cmdline.execute('scrapy crawl txms'.split())#'scrapy crawl txms'.split()输出成了列表  ['scrapy','crawl','txms']
pipelines.py文件
class TxmoviesPipeline(object):
    def process_item(self, item, spider):
        print(item)
        return item
txms.py文件
import scrapy
# ..回退一层文件夹
from ..items import TxmoviesItem

class TxmsSpider(scrapy.Spider):
    name = 'txms'
    allowed_domains = ['v.qq.com']
    start_urls = [
        'https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset=0&pagesize=30']
    #位移
    offset = 0

    def parse(self, response):
        #定义数据结构
        items = TxmoviesItem()
        #将页面解析数据放到列表,每个页面有多个这种div,解析完后就有多条,存到列表
        lists = response.xpath('//div[@class="list_item"]')# response.xpath('//div[@class="list_item"]')是列表
        #遍历列表将数据存到数据结构item
        for i in lists:
            #从每个div中提取电影名字
            items['name'] = i.xpath('./a/@title').get()     #xpath查找a链接下的标题信息
            #从每个div中提取电影描述
            items['description'] = i.xpath('./div/div/@title').get()
            #移交控制权给管道
            yield items
        #若位移小于120
        if self.offset < 120:
            #位移修改
            self.offset += 30
            url = 'https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset={}&pagesize=30'.format(
                 str(self.offset)) #   .format(str(self.offset))填充内容到offset={}
            #url = 'https://v.qq.com/x/bu/pagesheet/list?append=1&channel=cartoon&iarea=1&listpage=2&offset={'+str(self.offset)+'}&pagesize=30'
            #回调parse函数
            yield scrapy.Request(url=url, callback=self.parse)#   callback
Scrapy Redis是一个用于分布式爬取网页的Python框架。它是基于Scrapy框架的扩展,采用Redis作为分布式队列,可以在多个爬虫节点之间共享任务和数据。通过引入scrapy_redis.spider文件中的RedisSpider类,可以将原来继承的scrapy.Spider类改为RedisSpider类,从而实现对分布式爬虫的支持。 在使用分布式爬虫的过程中,首先需要将项目配置为分布式,并将项目拷贝到多台服务器中。然后启动所有的爬虫项目,这样每个爬虫节点都可以独立运行。接下来,在主redis-cli中使用lpush命令将需要爬取的网址推送到Redis队列中。这样,所有的爬虫节点都会开始运行,同时获取不同的任务和数据,实现分布式爬取的效果。 要使用Scrapy Redis进行分布式爬取,首先需要安装scrapy_redis包。可以通过在CMD工具中执行命令"pip install scrapy_redis"来进行安装。安装完成后,就可以在项目中使用scrapy_redis进行分布式爬取了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Scrapy基于scrapy_redis实现分布式爬虫部署](https://blog.csdn.net/baoshuowl/article/details/79701303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值