实践Python爬虫框架Scrapy来抓取豆瓣电影
爬虫就是请求网站并提取数据的自动化程序,其中请求,提取,自动化是爬虫的关键,爬虫有很多的框架,那么今天我们就学习下怎么使用Scrapy。今天我们就通过实践记录下如何使用Scrapy爬取豆瓣电影Top榜单过程,作为Python爬虫框架Scrapy的入门案例。
在开始爬取之前,首先要创建一个新的 Scrapy 项目,然后我们打开豆瓣电影 TOP 的页面,通过观察页面决定让我们的爬虫获取每一部电影的排名、电影名称、评分和评分的人数https://movie.douban.com/top。
在我们爬取过程中为了防止触发反爬机制而受到阻碍,我们需要先做一些反爬策略,代理IP和随机ua的添加都是必不可少的,关于代理IP,网络上有很多的代理商,选一家靠谱的就可以,比如本文中使用到的亿牛云爬虫代理加强版。新建好项目之后我们开爬虫程序,简单的爬虫代码如下,在项目中新建douban.py文件(./项目名/douban.py)
#! -*- encoding:utf-8 -*- import base64 import sys import random PY3 = sys.version_info[0] >= 3 def base64ify(bytes_or_str): if PY3 and isinstance(bytes_or_str, str): input_bytes = bytes_or_str.encode('utf8') else: input_bytes = bytes_or_str output_bytes = base64.urlsafe_b64encode(input_bytes) if PY3: return output_bytes.decode('ascii') else: return output_bytes class ProxyMiddleware(object): def process_request(self, request, spider): # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort) # 添加验证头 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass # 设置IP切换头(根据需求) tunnel = random.randint(1,10000) request.headers['Proxy-Tunnel'] = str(tunnel)
爬取到的数据我们需要进行清洗,分析后才是干净的数据。Scrapy 爬虫框架掌握好可以事半功倍,但是遇到简单的需求未必需要使用框架去解决,所以我们需要多学习些爬虫知识,然后根据实际需求进行选择。
实践Python爬虫框架Scrapy来抓取豆瓣电影
xiaotaomi
会员积分:6520
爬虫就是请求网站并提取数据的自动化程序,其中请求,提取,自动化是爬虫的关键,爬虫有很多的框架,那么今天我们就学习下怎么使用Scrapy。今天我们就通过实践记录下如何使用Scrapy爬取豆瓣电影Top榜单过程,作为Python爬虫框架Scrapy的入门案例。
在开始爬取之前,首先要创建一个新的 Scrapy 项目,然后我们打开豆瓣电影 TOP 的页面,通过观察页面决定让我们的爬虫获取每一部电影的排名、电影名称、评分和评分的人数https://movie.douban.com/top。
在我们爬取过程中为了防止触发反爬机制而受到阻碍,我们需要先做一些反爬策略,代理IP和随机ua的添加都是必不可少的,关于代理IP,网络上有很多的代理商,选一家靠谱的就可以,比如本文中使用到的亿牛云爬虫代理加强版。新建好项目之后我们开爬虫程序,简单的爬虫代码如下,在项目中新建douban.py文件(./项目名/douban.py)
#! -*- encoding:utf-8 -*- import base64 import sys import random PY3 = sys.version_info[0] >= 3 def base64ify(bytes_or_str): if PY3 and isinstance(bytes_or_str, str): input_bytes = bytes_or_str.encode('utf8') else: input_bytes = bytes_or_str output_bytes = base64.urlsafe_b64encode(input_bytes) if PY3: return output_bytes.decode('ascii') else: return output_bytes class ProxyMiddleware(object): def process_request(self, request, spider): # 代理服务器(产品官网 www.16yun.cn) proxyHost = "t.16yun.cn" proxyPort = "31111" # 代理验证信息 proxyUser = "username" proxyPass = "password" request.meta['proxy'] = "http://{0}:{1}".format(proxyHost,proxyPort) # 添加验证头 encoded_user_pass = base64ify(proxyUser + ":" + proxyPass) request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass # 设置IP切换头(根据需求) tunnel = random.randint(1,10000) request.headers['Proxy-Tunnel'] = str(tunnel)
爬取到的数据我们需要进行清洗,分析后才是干净的数据。Scrapy 爬虫框架掌握好可以事半功倍,但是遇到简单的需求未必需要使用框架去解决,所以我们需要多学习些爬虫知识,然后根据实际需求进行选择。
22-03-30 16:32
1128
0
回复
暂无评论