网络爬虫及其应用

网络爬虫及其应用

步骤:

(1)通过网络连接获取网页内容

(2)对获得的网页内容进行处理

注:可能需要增加伪装

这两个步骤分别使用不同的函数库:

requestsbeautifulsoup4
获取网页内容处理数据

request库的使用

函数:

get(url[,timeout=n])

  • timeout=n 参数,设定每次请求超时时间为n秒

  • 获取网页最常用的方法,在调用requests.get()函数后返回一个Response对象

  • Response的属性:

    属性描述
    status_code200连接成功,404表示失败
    texturl对应的页面内容
    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
[更多产品]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值