活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
学习日记
目录
2、python解析网页源码 (使用BeautifulSoup+lxml解析网页源码)
一、关于爬虫
1、爬虫的概念
爬虫(spider,又网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。它可以帮助我们在互联网上自动的获取数据和信息,其本质是一段程序。原则上,只要是浏览器(客户端)能做的事情,爬虫都能够做。
从技术层面来说就是 通过程序模拟浏览器请求站点的行为,把站点返回的HTML代码/JSON数据/二进制数据(图片、视频) 爬到本地,进而提取自己需要的数据,存放起来使用。
2、爬虫的优点
爬虫是一种从网络上高速提取数据的方式。可以把爬虫看成一个机器人,不停地点开一个个网页,从里面复制指定文本或图片进行保存(假设需求就是保存指定文本或图片)。它的手速非常非常快,一瞬间本地磁盘中就已经存了一大堆数据。
3、爬虫的分类
通用爬虫——准守robots协议的爬虫,通常指搜索引擎,抓取的是一整张页面数据
聚焦爬虫——针对特定网站爬虫,无视robots协议,是建立在通用爬虫的基础之上,抓取的是页面中特定的局部内容。
增量式爬虫——检测网站中数据更新的情况。只会抓取网站中最新更新出来的数据。
总的来说,爬虫也分善恶
善意的爬虫不破坏被爬取网站的资源,一般都是频率不高的正常访问,不窃取用户隐私。
恶意的爬虫影响网站运营,造成网站宕机。
4、重要提醒
爬虫合法,技术无罪,但是不能滥用。使用爬虫时要避免干扰网站正常运行,如果发现用户隐私或其他敏感内容一定不能传播,小心进去喝茶。
5、反爬和反反爬机制
反爬机制:门户网站,可以通过指定相应的策略或技术手段,防止爬虫程序进行网站数据的爬取。
反反爬策略:爬虫程序可以通过指定相关的策略或技术手段,破解门户网站中具备的反爬机制,从而可以获取门户网站的数据。#强行爬取可能涉及恶意
6、协议
robots.txt协议——君子协议,规定了网站中哪些数据可以被爬虫爬取,哪些数据不可以被爬取。
http协议(Hyper Text Transfer Protocal)——超文本传输协议,是一种发布与接收HTML页面的方法,是服务器和客户端进行数据交互的一种形式。
https协议(Hyper Text Transfer Protocol over SecureSocket Layer)——是HTTP协议的加密版本,在HTTP下加入了SSL层,是安全的超文本的传输协议。
7、常用请求头和常用的请求方法
常用请求头
1、User-Agent:浏览器名称。在请求一个网页的时候,服务器通过这个参数就可以知道哪种浏览器在访问。
2、Referer:表明当前这种请求是从哪个url来的。
3、cookie:http协议是无状态。用cookie来标识请求是否是同一个人。
常用的请求方法
get:一般适用于只从服务器获取数据,不会对服务器资源产生影响。
post:向服务器发送数据(登录)等,会对服务器资源产生影响。
8、常见的响应状态码
200:请求正常
301:永久重定向(访问不到某个网页会跳转到另一个网页)
302:临时重定向(未登录访问会跳转到登录页面)
400:请求url在服务器上找不到
403:服务器拒绝访问权限不够
500:服务器内部错误
9、url的详解
scheme://host:port/path/?query-string=xxx#anchor
1、scheme:代表的是访问的协议,一般为http或者https协议
2、host:主机名,域名
3、port:端口号。浏览器默认使用80端口
4、path:查找路径
5、query-string:查询字符串
6、anchor:锚点,前端定位页面
二、爬虫基本流程
浏览器提交请求—>下载网页代码—>解析成页面
模拟浏览器发送请求(获取网页代码)->提取有用的数据->存放于数据库或文件中
三、可能需要的库
from bs4 import BeautifulSoup #网页解析,获取数据
import re #正则表达式,文字匹配
import urllib.request,urllib.error #指定URL,获取网页数据
import xlwt #EXCEL操作
安装
pip install requests
pip install beautifulsoup4
BeautifulSoup简单易用,容易理解。但是使用bs4还需要安装另一个类库lxml,用来代替bs4默认的解析器,
用了lxml后,可以大幅度提升解析速度。
四、小例
1、requests请求网页
import requests
resp=requests.get('https://www.baidu.com') #请求百度首页
print(resp)
print(resp.content) #打印请求到的网页源码
2、python解析网页源码 (使用BeautifulSoup+lxml解析网页源码)
import requests
from bs4 import BeautifulSoup
resp=requests.get('https://www.baidu.com') #请求百度首页
print(resp)
print(resp.content) #打印请求到的网页源码
bsobj=BeautifulSoup(resp.content,'lxml') #将网页源码构造成BeautifulSoup对象,方便操作
a_list=bsobj.find_all('a') #获取网页中的所有a标签对象
for a in a_list:
print(a.get('href')) #打印a标签对象的href属性,即这个对象指向的链接地址
3、保存数据的方法
保存数据的方法大概可以分为几类:保存文本、保存二进制文件(包括图片)、保存到数据库。
import requests
from bs4 import BeautifulSoup
resp=requests.get('https://www.baidu.com') #请求百度首页
print(resp)
print(resp.content) #打印请求到的网页源码
bsobj=BeautifulSoup(resp.content,'lxml') #将网页源码构造成BeautifulSoup对象,方便操作
a_list=bsobj.find_all('a') #获取网页中的所有a标签对象
text=''
for a in a_list:
href=a.get('href') #获取a标签对象的href属性,即这个对象指向的链接地址
text+=href+'\n'
with open('url.txt','w') as f: #
f.write(text) #将text里的数据写入到文本中
五、Chrmoe浏览器
elements:分析网页结构,获取想要的数据。
console控制台:打印输出网站信息。
sources:加载网页所需要的所有的源文件,除elements的源码之外。
network:查看整个网页发送的所有网络请求。
sessio和cookie是用于保持HTTP长时间连接状态的技术
session代表服务器与浏览器的会话过程,是一种服务器端的机制,session对象用来储存特定用户会话所需的信息。session由服务器端生成,保存在服务器的内存、缓冲、硬盘或数据库中。
cookie是由服务器端生成后发送给客户端(一般指浏览),其总是保存在客户端。
cookie基本原理:创建cookie->设置储存cookie->发送cookie->读取cookie