一、基础概念
(一) 定义
网络爬虫,是一种按照一定规则,通过模拟客户端发送网络请求和接收响应,自动抓取网页信息的程序。只要是浏览器能做的事情,原则上爬虫都可以做。
我们常用的搜索引擎就是一个大规模的爬虫,获取的海量信息存储在数据库,当用户输入关键字进行查询时,搜索引擎通过索引快速返回结果。
(二) 分类
1.通用爬虫
通常指搜索引擎爬虫,基本工作原理:种子url列表抓取网页—数据存储—预处理提取关键信息—提供检索服务—网站排名(根据引用次数、点击次数等)
2.聚焦爬虫
针对特定网站的爬虫,基本工作原理:url列表—响应内容—提取url—提取数据—数据存储
当前页面的数据来源主要有三种:
对当前url请求对应的响应中
对其他url请求对应的响应中,比如ajax请求
响应中的js脚本动态生成
只有第一种数据才可以通过爬虫获取,因为当前url地址呈现的内容和url请求直接获取的响应不一定相同,响应中可能会通过js动态加载一些图片、样式,而当前页面呈现的是这些内容加载后的结果。
二、常用模块
爬虫核心功能即模拟客户端行为发送请求,然后从响应信息中提取数据。发送请求过程最常用到的模块为 requests,提取数据过程可以根据网页结构和属性提取,使用模块 BeautifulSoup,也可以通过正则表达式提取,使用模块 re。
(一) requests
1.基本使用
Python通用网络爬虫可以完成爬虫90%的工作,主要涉及requests模块的使用,requests的底层实现就是urllib,而且在Python2和Python3中通用。
requests对象的方法主要包括:request、get、post、head等,具体如下:
方法 含义 类型
request(method, url, **kwargs) 发送http请求,具体方法由method指定 Response
get(url, **kwargs) 发送http get方法请求 Response
post(url, **kwargs) 发送http post方法请求 Response
head(url, **kwargs) 发送http head方法请求 Response
方法中url为访问的网页url,**kwargs为控制访问的参数,共13个:
headers:请求头
params:请求参数
data:请求数据
cookies:携带cookies
json:JSON格式的请求数据
files:传输文件
timeout:请求超时时间,单位为秒
proxies:请求代理
allow_redirects:重定向,值为bool类型,默认为True
stream:获取内容立即下载,值为bool类型,默认为True
verify:认证SSL证书,值为bool类型,默认为True
cert:本地SSL证书
auth:支持HTTP认证
Response对象的常用属性:
属性 含义 类型
text content经过解码的数据 str
content Response的原始byte数据,没有经过解码 bytes
status_code 返回请求状态码 int
headers Response头信息 dict
request.xxx 返回对应的请求的方法和属性
注意:
response.text默认是ISO-8859-1编码 (可通过response.encoding查看),显示内容可能出现乱码,如果需要指定编码需要使用response.encoding=”utf-8″指定,或者使用response.content.decode(“utf-8”),默认utf-8解码
网页返回一整行json格式数据时,可以利用pycharm中Code-> Code Reformat Code,或者使用BeautifulSoup对象的prettify方法调整格式,使代码更易读
response.request.url与response.url不一定相同,比如重定向网站
request请求包中headers中User-Agent默认是python-requests/xxxxx,这导致很多网站返回结果与普通浏览器访问的不同,因此有必要在headers中模拟浏览器重新指定User-Agent
爬虫要模仿浏览器的合法请求,并不是所有请求参数都是必须的,要尝试、筛选使浏览器返回正常页面的必要参数
如果电脑版请求不易仿造,可以尝试手机版
保存图片、文件、音频、视频等要以二进制形式写入:
2.使用代理
区分正向代理和反向代理:
(1) 正向代理
客户端知道目标服务器地址,只是在中间设置代理机
(2) 反向代理
客户端不知道服务器地址,目标服务器由代理进行访问
使用方法:
使用代理作用:
让服务器以为不是同一个客户端在请求
防止真实地址被泄露,防溯源
免费代理网站,适用于时限要求不长、质量要求不高的用户:
http://proxy.mimvp.com
http://www.66ip.cn/index.html
https://ip.jiangxianli.com/
http://www.ip3366.net/free/?stype=3
https://ip.ihuan.me/
https://www.kuaidaili.com/free/inha/
https://www.7yip.cn/free/
为判断代理的可用性,可以在requests请求中添加超时参数进行测试,一般准备一堆ip地址组成ip池,随机选择使用。
3.模拟登陆
网站验证机制主要包括Session、Cookie和Token,具体区别参考文章:浅析Session、Cookie、Token原理与区别
模拟登录首先要利用浏览器开发者工具,通过查看源码或者抓包分析,确定网站的登录地址,然后利用爬虫仿照正常登录发送的请求进行登录。
(1) 确定登录地址
思路一:查看源码
在前端源码中寻找提交表单action对应的url地址,input标签中name的值作为键,用户名和密码作为值。
思路二:抓包分析
通过抓包寻找登录的url地址,如果提交的参数不会变,则直接用,如果参数动态变化,则要进一步确定生成参数的方式,注意参数生成可以通过当前url的响应,也可以通过js脚本。
(2) 模拟登陆网站
思路一:利用session类
requests提供了一个session类,专门用来实现客户端和服务端会话保持,使用方式:
在成功登录后,之后的访问session能够自动携带登录成功时的凭证,通常是cookie。
思路二:携带凭证登陆
这里以cookie为例,可以通过POST登录请求,定位response响应信息中的Set-Cookie头中找到cookie信息,或者从已登录界面Cookie头中查看cookie信息。登录请求中携带cookie的方法一般有两种:
方法一:cookie放在headers中携带
方法二:cookie放在requests请求参数中携带
使用字典推导式将cookie字符串转换成字典格式
注意:不需要使用cookies时尽可能不用,不然容易被识别为爬虫。
(二) BeautifulSoup
BeautifulSoup可以根据HTML网页的结构和属性查找所需信息,它利用解析器将HTML或XML文档转换成一个树形结构,解析器包括以下几种:
Python标准库解析器,Python内置标准库,无需安装,使用方法:BeautifulSoup(markup, “html.parser”)
lxml HTML解析器,需要安装,使用方法:BeautifulSoup(markup, “lxml”)
lxml XML解析器,需要安装,唯一支持XML的解析器,使用方法:BeautifulSoup(markup, “xml”)
html5lib解析器,需要安装,使用方法:BeautifulSoup(markup, “html5lib”)
树形结构中每个节点都是一个对象,所有对象可以归纳为4种:
1.BeautifulSoup
BeautifulSoup对象以结构化记录着HTML文档的所有内容,BeautifulSoup(html, “html.parser”)返回的即BeautifulSoup对象,常见属性/方法如下:
属性 / 方法 含义 类型
<TagName> 获取第一个TagName标签的内容,返回Tag对象 Tag
prettify() 格式化BeautifulSoup对象的内容,增加易读性 Str
find_all(name[, key = value | {key: value}]) 通过标签名称和属性筛选查找Tag对象,返回标签对象列表 List[Tag]
find(name[, key = value | {key: value}]) 通过标签名称和属性筛选查找Tag对象,返回符合条件的第一个对象 Tag
2.Tag
Tag对象即HTML文档中的标签,常见属性/方法如下:
属性 / 方法 含义 类型
name 获取标签的名字 Str
attrs 获取标签所有的属性,通过attrs[name]获取属性的值 Dict
string 获取标签内容,返回NavigableString对象 NavigableString
contents 获取直接子节点标签,包括NavigableString和换行符,返回Tag / NavigableString对象列表 List[Tag / NavigableString]
children 获取子孙节点标签,包括NavigableString和换行符,返回列表生成器 List[Generator]
parent 获取直接父节点标签,返回Tag对象 Tag
parents 获取祖先节点标签,返回生成器 Generator
get(name) 获取标签相应属性的值的列表,也可以使用attrs[name]获取 List
3.NavigableString
NavigableString对象即Tag标签内的内容
4.Comment
Comment对象即Tag标签内的注释内容,不包括注释符
安装方法:pip3 install beautifulsoup4,安装之后的包名为bs4,一般只导入BeautifulSoup,解析器使用”html.parser”,具体使用方法如下例:
(三) re
参考文章:Python文件操作
文章知识点与官方知识档案匹配
Python入门技能树网络爬虫urll
Python网络爬虫代码
可以爬取百度百科指定网页开始的数据资料,使用python3版本语言编写。
python 爬虫实战的原理
二、原理 功能:下载网页数据,为搜索引擎系统提供数据来源。组件:控制器、解析器、资源库。 Web网络爬虫系统首先将种子URL放入下载队列,然后简单地从队首中取出一个URL下载其对应的网页。得到网页的内容将其储存后,再经过解析网页中的链接信息可以得到一些新的URL,将这些URL加入下载队列。然后取出一个URL,对其对应的网页进行下载,再解析,如此反复进行,直到遍历了整个网络或满足某种条件后才会停止下来。 三、爬虫分类 1、传统爬虫 传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的U
爬虫简单的来说就是用程序获取网络上数据这个过程的一种名称。如果要获取网络上数据,我们要给爬虫一个网址(程序中通常叫URL),爬虫发送一个HTTP请求给目标网页的服务器,服务器返回数据给客户端(也就是我们的爬虫),爬虫再进行数据解析、…
Python 爬虫Selenium库的使用 一、基础知识 首先要使用python语言做爬虫,需要学习一下python的基础知识,还有HTML、CSS、JS、Ajax等相关的知识。这里,列出python中一些与爬虫相关的库和框架: 1.1、urllib和urllib2 …
是入门Python最好的方式之一,掌握Python爬虫之后再去学习Python其他知识点,会更加地得心应手。当然,用Python爬虫对于零基础的朋友来说还是有一定难度的,那么朋友,你真的会Python爬虫吗?下面就给大家简单阐述一下Python爬虫那些事儿,对于想提升实战的朋友,也准备了教程,共212页,内容详细代码清晰,很适合入门学习。基础爬虫架构从上图可以看出,基础的爬虫架构大致分为5类:爬虫调度器、URL管理器、HTML下载器、HTML解析器、数据存储器。
网络爬虫python实现
网络爬虫python实现,使用scrapy框架,实现指定网址的抓取
网络爬虫 python
python 网络爬虫 python 网络爬虫 python 网络爬虫 python 网络爬虫 python 网络爬虫 python
解析Python网络爬虫:核心技术、Scrapy框架、分布式爬虫
python简单实现网络爬虫
在这一篇博客中,我会用python来实现一个简单的网络爬虫。简单的爬取一下一些音乐网站、小说网站的标题、关键字还有摘要!所以这个爬虫并不是万能爬,只针对符合特定规则的网站使用。(只使用于爬标题、关键字和摘要的,所以只能爬在head标签中这三个信息都有的且meta标签中name参数在本文信息前面的网站。)希望大家看了这篇博客,能对大家学习爬虫有些帮助! 要用到的知识,但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。 什么是爬虫 网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。 大数据时代,要进行数据分析,首先要有数据源,可数据源从哪里来,花钱买,没预算,只能从其它网站就行抓取。 细分下来,业内分为两类:爬虫和反爬虫。 反爬虫:顾名思义,就是防止你来我网站或APP上做爬虫的。 爬虫工程师和反爬虫工程师是一对相爱相杀的小伙伴,经常因为对方要加班写代码。
http://c.biancheng.net/view/2011.html 这是一篇详细介绍Python爬虫入门的教程,从实战出发,适合初学者。读者只需在阅读过程紧跟文章思路,理清相应的实现代码,30 分钟即可学会编写简单的 Python 爬虫。 这篇 Python 爬虫教程主要讲解以下 5 部分内容: 了解网页; 使用 requests 库抓取网站数据; 使用 Beautiful S…
推荐使用python爬虫
1. 首先第一步我们先找到自己抓取的网站网址以及内容 在这里我使用的是https://m.douban.com/group/729027/ 抓取的内容是这个网页下的: 所有的讨论 2. 对这个网页的html进行解析,找到讨论这一栏的html源码 使用F12对当前页面进行解析: 点击圈起来的部分后,点击讨论中的 “婉卿……” 右边就能自动跳转到这一句的源码了 右键单击源码后点击复制中的 复制selector 复制出来的是:#group-topics > div:nt…
AJAX动态加载网页 一 什么是动态网页 J哥一向注重理论与实践相结合,知其然也要知其所以然,才能以不变应万变。 所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。——来源百度百科 动态网页具有减少工作量、内容更新快、可完成功能多等特点,被很…
Python网络爬虫与数据采集
2:python网络爬虫权威指南_python网络爬虫权威指南_python爬虫指南_
网络爬虫(又称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
Python网络爬虫实战
本书从Python的安装开始,详细讲解了Python从简单程序延伸到Python网络爬虫的全过程。本书从实战出发,根据不同的需求选取不同的爬虫,有针对性地讲解了几种Python网络爬虫。本书共8章,涵盖的内容有Python语言的…
Python网络爬虫技术-教学大纲
Python网络爬虫技术-教学大纲.pdfPython网络爬虫技术-教学大纲.pdfPython网络爬虫技术-教学大纲.pdfPython网络爬虫技术-教学大纲.pdfPython网络爬虫技术-教学大纲.pdfPython网络爬虫技术-教学大纲.pdfPython网络爬虫…
Python网络爬虫与数据采集
Python网络爬虫与数据采集
网络爬虫Python实现
利用Python实现网络爬虫系统,能够在GUI的URL输入栏中输入地址,提取电商网站的相关结构,自动搜索下一级页面的基本内容
网络爬虫Python
链家网站的网络爬虫 带数据清洗 可视化功能链家网站的网络爬虫 带数据清洗 可视化功能
网络爬虫Python和数据分析
网络爬虫是一个自动提取网页的程序,它为搜索 引擎从万维网上下载网页,是搜索引擎的重要组 成。传统爬虫从一个或若干初始网页的URL开始, 获得初始网页上的URL,在抓取网页的过程中, 不断从当前页面上抽取新的URL放入队列,直到满 足系统的一定停止条件
没有回复内容