龙空技术网

scrapy虫术|通用爬虫之站酷全站设计师资料爬取

娇兮心有之 258

前言:

目前朋友们对“虫术python绝技pdf下载”大约比较关心,同学们都需要剖析一些“虫术python绝技pdf下载”的相关资讯。那么小编在网络上网罗了一些关于“虫术python绝技pdf下载””的相关文章,希望朋友们能喜欢,看官们一起来了解一下吧!

工具环境

语言:python3.6

编辑器:Pycharm

数据库:MongoDB

框架:scrapy1.5.1

温馨提示:

阅读此文可能需要对scrapy框架有基本的了解,对xpath解析有一个基本的了解

爬取思路

爬取站点:

我们需要的是每一个设计师的资料页面的信息,如下所示:

逻辑其实很简单:

1. 找到尽可能多的设计师

2. 找到他们的主页(作为跳板)

3. 点开详情页资料,开始爬取信息

第一个是设计师页面的不同类型的选项,还有按照城市区分的

设计师首页或作品也下面的访客和留言

每个设计师的关注对象和粉丝

我最后选择的是每个设计的关注和粉丝,因为对于第一个,我可能需要将每个城市的id记录在案,然后再进行了详细的拆分,生成根据城市和类型的自由组合,然后再将这些组合的url作为初始链接进行爬虫,相当于爬取之前要进行一步预处理,不太适合scrapy通用爬取的方法

1. 随机请求头:

import randomfrom scrapy import signalsfrom scrapy.downloadermiddlewares.useragent import UserAgentMiddlewareclass RandomUserAgentMiddleware(UserAgentMiddleware): """This middleware allows spiders to override the user_agent""" def __init__(self, settings, user_agent='Scrapy'): super(RandomUserAgentMiddleware, self).__init__() self.user_agent = user_agent user_agent_file = settings.get('USER_AGENT_LIST') if not user_agent_file: ua = settings.get('USER_AGENT', user_agent) self.user_agent_list = [ua] else: with open(user_agent_file, 'r') as f: self.user_agent_list = [i.strip() for i in f.readlines()] @classmethod def from_crawler(cls, crawler): o = cls(crawler.settings) crawler.signals.connect(o.spider_opened, signal=signals.spider_opened) return o def spider_opened(self, spider): self.user_agent = getattr(spider, 'user_agent', self.user_agent) def process_request(self, request, spider): user_agent = random.choice(self.user_agent_list) if self.user_agent: request.headers.setdefault(b'User-Agent', user_agent)

核心思路就是在settings内得到的user-agent的文件路径之地,之后再每次请求的时候,随机再其中抽取一个,如果没有拿到的话,就默认选择配置中的默认请求头

2. 随机代理ip

对应站酷网,核心的思路在上面的思路中已经结束,代码注释中有每一步的追踪步骤,不在赘述

 'zcool': ( # 追踪下一页 Rule(LinkExtractor(restrict_xpaths='//a[@class="laypage_next"]')), # 提取如  样式的页面 Rule(LinkExtractor(allow='.*\/u\/\d+$')), # 追踪  页面设计师主页的链接 Rule(LinkExtractor(restrict_xpaths='//a[@z-st="user_content_card_1_user_name"]')), # 追踪  筛选 | 推荐设计师 栏目的分页 Rule(LinkExtractor(restrict_xpaths='//a[starts-with(@z-st, "desinger_filter_recommend")]')), # 追踪  筛选 | 不限职业 栏目的分页 Rule(LinkExtractor(restrict_xpaths='//a[starts-with(@z-st, "desinger_filter_profession")]')), # 本来准备使用访客和留言来追踪的,后来发现页面是动态加载的,提取收到该信息,遂弃用 # Rule(LinkExtractor(restrict_xpaths='//a[@class="usernick"]')), # Rule(LinkExtractor(restrict_xpaths='//a[@class="visitor-name"]')), # 追踪 粉丝页面 Rule(LinkExtractor(allow='.*?fans.*')), # 追踪 关注页面 Rule(LinkExtractor(allow='.*?follow.*')), # 追踪 设计师资料页,并回调给parse_item函数处理 Rule(LinkExtractor(allow='.*?profile.*'), callback='parse_item'), )

至此,一个通用的母体爬虫便制作完毕,之后如果用来爬反爬虫不是特别强的网站,一个爬虫也不过就是分析网站和做页面解析费点时间,做好这个之后,一个简单的页面爬虫,我初略估计不会超过半小时即可

现在我的爬虫还在提取中,目前单机采集速度大概在日采集5-6万的样子,如果要提速可以自己在配置中增加并发

有需要Python学习资料的小伙伴吗?小编整理【一套Python资料、源码和PDF】,感兴趣者可以关注小编后私信学习资料(是关注后私信哦)反正闲着也是闲着呢,不如学点东西啦

标签: #虫术python绝技pdf下载