网络爬虫及其应用
步骤:
(1)通过网络连接获取网页内容
(2)对获得的网页内容进行处理
注:可能需要增加伪装
这两个步骤分别使用不同的函数库:
获取网页内容 | 处理数据 |
request库的使用
函数:
get(url[,timeout=n])
-
timeout=n 参数,设定每次请求超时时间为n秒
-
获取网页最常用的方法,在调用requests.get()函数后返回一个Response对象
-
Response的属性:
属性描述 status_code 200连接成功,404表示失败 text url对应的页面内容 encoding 响应内容的编码方式 content 响应内容的二进制形式
案例:爬取百度首页的内容
#通过爬取百度首页熟悉相关函数的使用和Response对象的属性 import requests url='https://www.baidu.com/' r=requests.get(url,timeout=30) #属性:status_code print("连接状态:",r.status_code) #属性:text print("网页内容:",r.text) #可以看出没有输出中文内容,要对编码格式进行更改 #属性:encoding r.encoding='UTF-8' print("更改完后编码方式的网页内容:",r.text)
改进:
import requests def getHTMLText(url): try: r=requests.get(url,timeout=30) r.raise_for_status() #如果状态不是200,引发异常 r.encoding="UTF-8" #无论原来采用什么编码,都改成UTF-8 return r.text except : return "出错"
url="https://www.baidu.com/" print(getHTMLText(url))
beasutifulsoup4 库的使用
如何从网页内容中获取你所需要的内容?
通过beautifulsoup4库对网页中的内容进行分割
常见引用方式:
from bs4 import BeautifulSoup
使用方式:
url="https://www.baidu.com/" text=getHTMLText(url) #返回的是字符串类 soup=BeautifulSoup(text,'html.parser')
-
创键的Beautifulsoup对象是一个树形结构,它包含HTML页面里的每一个Tag元素。
-
每个标签对应四个属性:name attrs contents string
name | 字符串,标签的名字,比如div |
attrs | 字典,包含了原来页面Tag所有的属性,比如href |
contents | 列表,这个Tag下所有子Tag的内容 |
string | 字符串,Tag所包围的文本,网页中真实的文字 |
- 下面是一个标签结构实例:
-
在网页上’<C-F>进行搜索<a>查看标签情况
-
Beautiful.find_all()依据参数找到对应的标签,返回标签列表,可以通过限定缩小范围,所给的参数越多返回的结果越精确
实例:查找百度网页所有a标签的内容
text=getHTMLText(url) #返回的是字符串类 soup=BeautifulSoup(text,'html.parser') find_a=soup.find_all('a') print(find_a)
结果:
E:pythonProject>python E:pythonproject爬取百度首页3.py
[新闻, hao123, 地图, 视频, 贴吧, 登录, 更多产品, 关于百度, About Baidu, 使用百度前必读, 意见反馈]
可以通过加字典的方式进一步缩小范围:
find_a1=soup.find_all('a',{'class':"bri"}) #对查找内容进行限定 print(find_a1)
结果:
E:pythonProject>python E:pythonproject爬取百度首页3.py
[更多产品]
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试