Python爬虫初学二(网络数据采集)
目录
一、网络数据采集
1.什么是网络数据采集
2.网络数据采集的特点
二、网络数据采集之urllib库
三、网络数据采集之requests库
1.requests安装
2.request方法汇总
3.response对象汇总
4.response对象
四.高级应用一:添加headers
五.高级应用二:IP代理设置
六.项目案例一:京东商品的爬取
七.项目案例二:百度/360搜索关键字提交百度/360搜索关键字提交
一、网络数据采集
1.什么是网络数据采集
“网络数据采集”是指利用互联网搜索引擎技术实现有针对性、行业性、精准性的数据抓取,并按照一定规则和筛选标准进行数据归类,并形成数据库文件的一个过程。
2.网络数据采集的特点
- 支持自定义表单。
- 支持自适应采集。
- 支持集群采集。
- 支持各种报表导出。
- 支持仿人工式的随机采集数据。
- 支持自定义阅读模板。
- 支持登陆、代理采集。
- 支持各种列表分页采集。
- 支持各种内容分页采集。
- 支持各种排重过滤。
- 各种采集日志和采集源日志监控。
- 支持采集网站、采集源管理。
- 支持采集图片、附件、音频,视频等文件或附件。附件与正文自动映射与关联。
- 支持多种附件保存方式,可保存至磁盘或数据库。
- 支持附件的压缩存储。
- 支持对采集来的信息进行二次加工。支持采集内容的自动排版。
- 真正的多用户采集系统,每个操作都要记录操作内容、操作人以及操作时间。
- 真正的多线层、多任务采集、集群采集。
- 图形监控网络使用情况、采集情况等。
- 支持海量数据采集。
- 软件实用、易用、功能强大。
- 可移植、可扩展、可定制。
Python 给人的印象是抓取网页非常方便,提供这种生产力的,主要依靠的就是 urllib、requests这两个模块。
这里重点介绍requests模块。
二、网络数据采集之urllib库
官方文档地址:https://docs.python.org/3/library/urllib.html
urllib库是python的内置HTTP请求库,包含以下各个模块内容:
(1)urllib.request:请求模块
(2)urllib.error:异常处理模块
(3)urllib.parse:解析模块
(4)urllib.robotparser:robots.txt解析模块
urlopen进行简单的网站请求,不支持复杂功能如验证、cookie和其他HTTP高级功能,若要支持这些功能必须使用build_opener()函数返回的OpenerDirector对象。
很多网站为了防止程序爬虫爬网站照成网站瘫痪,会需要携带一些headers头部信息才能访问, 我们可以通过urllib.request.Request对象指定请求头部信息.
from urllib.request import urlopen, Request# 方法一: 通过get方法请求url
with urlopen('http://www.python.org/') as f:# 默认返回的页面信息是bytes类型, bytes类型转换成字符串,decode方法。print(f.read(300).decode('utf-8'))# 方法二: Request对象发起请求
user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0'
# 封装请求头部信息, 模拟浏览器向服务器发起请求
request = Request('http://www.python.org/', headers={'User-Agent': user_agent})
with urlopen(request) as f:# 默认返回的页面信息是bytes类型, bytes类型转换成字符串,decode方法。print(f.read(300).decode('utf-8'))
运行结果如下:
三、网络数据采集之requests库
1.requests安装
requests官方网址: https://requests.readthedocs.io/en/master/
安装:
pip install -i http://pypi.douban.com/simple requests
2.request方法汇总
方法 | 说明 |
requests.request() | 构造一个请求,支撑以下各方法的基础方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法 |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCH |
requests.delete() | 向HTML页面提交删除请求,对应于HTTP的DELETE |
3.response对象汇总
from urllib.error import HTTPErrorimport requestsdef get():# get方法可以获取页面数据,也可以提交非敏感数据# url = 'http://127.0.0.1:5000/'# url = 'http://127.0.0.1:5000/?username=fentiao&page=1&per_page=5'url = 'http://127.0.0.1:5000/'try:params = {'username': 'lucky','page': 1,'per_page': 5}response = requests.get(url, params=params)print(response.text, response.url)# print(response)# print(response.status_code)# print(response.text)# print(response.content)# print(response.encoding)except HTTPError as e:print("爬虫爬取%s失败: %s" % (url, e.reason))def post():url = 'http://127.0.0.1:5000/post'try:data = {'username': 'admin','password': 'westos12'}response = requests.post(url, data=data)print(response.text)except HTTPError as e:print("爬虫爬取%s失败: %s" % (url, e.reason))if __name__ == '__main__':get()# post()
4.response对象
Response对象包含服务器返回的所有信息,也包含请求的Request信息。
属性 | 说明 |
r.status_code | HTTP请求的返回状态,200表示连接成功,404失败 |
r.text | HTTP响应内容的字符串形式,URL对应的页面内容 |
r.content | HTTP响应内容的二进制形式 |
r.encoding | 从HTTP header中猜测的响应内容编码方式 |
r.apparent_encoding |
从内容中分析出的响应的编码方式(备选编码方式) |
四.高级应用一:添加headers
有些网站访问时必须带有浏览器等信息,如果不传入headers就会报错
headers = {'User=Agent':useragent}
response = requests.get(url, headers = heders)
UserAgent是识别浏览器的一串字符串,相当于浏览器的身份证,在利用爬虫爬取网站数据时,频繁更换UserAgent可以避免触发相应的反爬机制。
fake-useragent对频繁更换UserAgent提供了很好的支持,可谓防反扒利器。
# 用户代理
import requests
from fake_useragent import UserAgentdef add_headers():"""封装一个请求头部,获取页面的时候加进去,get,post都可以不同的浏览器 请求头部不同"""#谷歌浏览器的请求头部 拷贝过来# headers= {'user_Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}# 默认情况下python爬虫的用户代理是:客户端请求的user_agent: python-requests/2.22.0ua = UserAgent() # 从网络获取所有的用户代理# print(ua.random) #可以随机拿出一个用户代理headers = {'user_Agent': ua.random}response = requests.get('http://127.0.0.1:5000', headers=headers)print(response)if __name__ == '__main__':add_headers()
五.高级应用二:IP代理设置
在进行爬虫爬取时,有时候爬虫会被服务器给屏蔽掉,这时采用的方法主要有降低访问时间,通过代理IP访问。ip可以从网上抓取,或者某宝购买。
proxies = { "http": "http://127.0.0.1:9743", "https": "https://127.0.0.1:9743",}
response = requests.get(url, proxies=proxies)
# IP代理
import requests
from fake_useragent import UserAgentua = UserAgent()
# 代理IP
proxies = {'http':'http://222.95.144.65:3000','https':'https://182.92.220.212:8080'
}
response = requests.get('http://47.92.255.98:8000',headers = {'User-Agent':ua.random},proxies = proxies)print(response)
# 这是因为服务器端会返回数据:get提交的数据和请求的客户端ip
#如何判断是否成功:返回的客户端IP刚好是代理IP
print(response.text)
六.项目案例一:京东商品的爬取
from urllib.error import HTTPErrorimport requests
from colorama import Fore
from fake_useragent import UserAgentdef download_page(url, parmas=None):try:ua = UserAgent()headers = {'User-Agent': ua.random}response = requests.get(url, params=parmas, headers=headers)except HTTPError as e:print(Fore.RED + '[-] 爬取网站%s失败: %s' % (url, e.reason))return Noneelse:# content返回的是bytes类型return response.contentdef download_file(content=b'', filename='hello.html'):""":param content: 要写入本地的html字符bytes类型:param filename: 写入本地的文件名:return:"""with open(filename, 'wb') as f:f.write(content)print(Fore.GREEN + '[+]写入文件%s成功' % (filename))if __name__ == '__main__':# url = 'https://item.jd.com/100012015170.html'# html = download_page(url)# download_file(content=html)url = 'https://www.so.com/s'params = {'q': 'python'}content = download_page(url, params)download_file(content)
测试结果:
七.项目案例二:百度/360搜索关键字提交百度/360搜索关键字提交
百度的关键词接口:https://www.baidu.com/baidu?wd=xxx&tn=monline_4_dg
360的关键词接口:http://www.so.com/s?q=keyword
from urllib.error import HTTPError
from colorama import Fore
import requests
from fake_useragent import UserAgentdef download_page(url, params=None):try:ua = UserAgent()headers = {'User-Agent': ua.random}response = requests.get(url, params=params, headers = headers)except HTTPError as e:print(Fore.RED + '[-] 爬取网站失败:%s' %(url, e.reason) )return Noneelse:return response.content #content 返回的是bytes类型def download_file(content = b'' ,filename='craw.html'):""":param filename: 写入本地的文件名:param content: 要写入本地的html字符串 bytes类型:return:"""with open(filename, 'wb') as f:f.write(content)print(Fore.GREEN+'[+] 写入文件%s成功' %(filename))if __name__ == '__main__':url = 'https://www.so.com/s'params = {'q':'python'}content = download_page(url,params)download_file(content)
测试结果:
Python爬虫初学二(网络数据采集)相关推荐
- Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)
专题系列导引 爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集 课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...
- 转 Python爬虫入门二之爬虫基础了解
静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...
- 使用Python爬虫爬取网络美女图片
代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...
- 我妈给我介绍对象了,我大学还没毕业呢,先在婚介市场也这么卷了的吗?【Python爬虫实战:甜蜜蜜婚介数据采集】
大家好,我是辣条. 说出来你们可能不信,我一个在校还没毕业的学生家里竟然给我介绍对象了-这么着急的吗?现在结婚市场都这么卷了吗?男孩们女孩们不努力的话是会被家里捉回去结婚的哦. 这是和我妈的聊天对话, ...
- python爬虫初学实战——免登录爬取easyicon里的vip图标(2)
python爬虫初学实战-免登录爬取easyicon里的vip图标(2) 实验日期:2020-08-09 tips:没看过前面(1)的可以康康,指路 -> 爬取easyicon里的png图标 成 ...
- python爬虫初学实战——免登录爬取easyicon里的vip图标(1)
python爬虫初学入门实战 --无需登录无需vip获得各种大小的png图标,爬取easyicon里的图标并储存 首先附上爬取的网址地址 实验环境 操作系统:windows 10 版本:python ...
- Python爬虫(二)
Python爬虫(二) 一.请求对象的定制-User-Agent反爬机制 请求对象的定制:由于urlopen方法中没有字典类型的数据存储,所以headers不能直接存储进去 请求对象的定制的目的:是为 ...
- python爬虫设计模式_Python3网络爬虫(一):利用urllib进行简单的网页抓取
点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...
- 萌新python爬虫初学
前言:先声明本人是小菜鸡一枚,望大佬勿鄙视.就在今天总感觉有什么大事发生,心神不宁的,突然天空一声巨响,菜鸡萌生写博客的想法.(天啦!天啦!这是要翻天了,菜鸡都要写博客了)现在的初心是:方便自己整理学 ...
最新文章
- java基础--日期--练习集锦
- 独家 | 如何创建用于离线估算业务指标的测试集?(附代码链接)
- 0513JS基础:数组内置方法、数学函数、时间函数
- 1.大数据处理架构Hadoop
- PWN-PRACTICE-BUUCTF-8
- 3-11 Matplotlib数据可视化基础
- Linux创始人Linus Torvalds怒怼Intel:正视问题而不是搞公关才是正事
- linux中的文件权限drm解释,DRM内核源码分析之三
- C++中函数作为参数传递给其他函数
- SQL 时间截按月分组查询
- python创建子窗口_python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
- PDF虚拟打印机怎么保存文件
- 《数据结构导论》之树
- centos php ioncube_CentOS简单安装ioncube组件
- 【Apache+Tomcat+Session+Memcache 高性能群集搭建】
- boost入门(一):boost简介
- python、变量命名中字母不区分大小写_python变量名不区分大小写吗
- 微信开发--IOS微信端confirm以及alert去掉网址的方法
- 人脸识别简单总结(一) 生物特征识别的前世今生
- PPT如何锁定一些元素(使用母版的策略)