目录

一、网络数据采集

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爬虫初学二(网络数据采集)相关推荐

  1. Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  2. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  3. 使用Python爬虫爬取网络美女图片

    代码地址如下: http://www.demodashi.com/demo/13500.html 准备工作 安装python3.6 略 安装requests库(用于请求静态页面) pip instal ...

  4. 我妈给我介绍对象了,我大学还没毕业呢,先在婚介市场也这么卷了的吗?【Python爬虫实战:甜蜜蜜婚介数据采集】

    大家好,我是辣条. 说出来你们可能不信,我一个在校还没毕业的学生家里竟然给我介绍对象了-这么着急的吗?现在结婚市场都这么卷了吗?男孩们女孩们不努力的话是会被家里捉回去结婚的哦. 这是和我妈的聊天对话, ...

  5. python爬虫初学实战——免登录爬取easyicon里的vip图标(2)

    python爬虫初学实战-免登录爬取easyicon里的vip图标(2) 实验日期:2020-08-09 tips:没看过前面(1)的可以康康,指路 -> 爬取easyicon里的png图标 成 ...

  6. python爬虫初学实战——免登录爬取easyicon里的vip图标(1)

    python爬虫初学入门实战 --无需登录无需vip获得各种大小的png图标,爬取easyicon里的图标并储存 首先附上爬取的网址地址 实验环境 操作系统:windows 10 版本:python ...

  7. Python爬虫(二)

    Python爬虫(二) 一.请求对象的定制-User-Agent反爬机制 请求对象的定制:由于urlopen方法中没有字典类型的数据存储,所以headers不能直接存储进去 请求对象的定制的目的:是为 ...

  8. python爬虫设计模式_Python3网络爬虫(一):利用urllib进行简单的网页抓取

    点击蓝色字免费订阅,每天收到这样的好信息 前言:最近有不少粉丝关注本公众号.并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧.大家想买什 ...

  9. 萌新python爬虫初学

    前言:先声明本人是小菜鸡一枚,望大佬勿鄙视.就在今天总感觉有什么大事发生,心神不宁的,突然天空一声巨响,菜鸡萌生写博客的想法.(天啦!天啦!这是要翻天了,菜鸡都要写博客了)现在的初心是:方便自己整理学 ...

最新文章

  1. java基础--日期--练习集锦
  2. 独家 | 如何创建用于离线估算业务指标的测试集?(附代码链接)
  3. 0513JS基础:数组内置方法、数学函数、时间函数
  4. 1.大数据处理架构Hadoop
  5. PWN-PRACTICE-BUUCTF-8
  6. 3-11 Matplotlib数据可视化基础
  7. Linux创始人Linus Torvalds怒怼Intel:正视问题而不是搞公关才是正事
  8. linux中的文件权限drm解释,DRM内核源码分析之三
  9. C++中函数作为参数传递给其他函数
  10. SQL 时间截按月分组查询
  11. python创建子窗口_python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
  12. PDF虚拟打印机怎么保存文件
  13. 《数据结构导论》之树
  14. centos php ioncube_CentOS简单安装ioncube组件
  15. 【Apache+Tomcat+Session+Memcache 高性能群集搭建】
  16. boost入门(一):boost简介
  17. python、变量命名中字母不区分大小写_python变量名不区分大小写吗
  18. 微信开发--IOS微信端confirm以及alert去掉网址的方法
  19. 人脸识别简单总结(一) 生物特征识别的前世今生
  20. PPT如何锁定一些元素(使用母版的策略)

热门文章

  1. LabWindows CVI 2017开发笔记--串口调试软件实例源码
  2. oracle分布式数据库搭建,ORACLE实现分布式数据库应用
  3. 计算机控制中在线离线,2020年秋季学期《机电系统计算机控制》在线考试补考(适用于2021年4月份考试)【答案】...
  4. Java NIO文件路径管理:Path类和Paths类
  5. 我战地日记的第一贴,占地方
  6. 笔记本更换SSD后卡顿、假死、失去响应问题探究
  7. laravel助手函数
  8. 玩转k8s(三)—— 运行应用
  9. 【ADC】分析ADC动态参数的MATLAB代码
  10. Java 开发日记高级~