python之获取静态网页的内容

这里提供两种方法来获取静态网页的内容,以北邮新闻网为例子
1.利用lxml库中的etree;
2.利用BeautifulSoup库;

1.利用lxml库中的etree:

import requests
from lxml import etree

headers = {
        'user-agent':xxx
        }
url = 'https://news.bupt.edu.cn/byyw.htm'
html = requests.get(url,headers)
html.encoding = 'utf-8'
# 将html转换成_Element对象
con = etree.HTML(html.text)
# 通过xpath表达式获取属性为tit3的h3标签中的文本和链接
title = con.xpath('//h3[@class="tit3"]/a/text()')
link  = con.xpath('//h3[@class="tit3"]/a/@href')
for i in zip(title, link):
     print({'标题':i[0],
          '链接':i[1]})

其中,headers中的user-agent是xxx,xxx内容可以从自己电脑获取,
打开Chrome浏览器:
user-agent的获取

user-agent是http协议中的一部分,属于头域的组成部分,user-agent也简称UA。用较为普通的一点来说,是一种向访问网站提供你所使用的浏览器类型、操作系统及版本、CPU 类型、浏览器渲染引擎、浏览器语言、浏览器插件等信息的标识。

2.利用BeautifulSoup库:

import requests
from bs4 import BeautifulSoup

url = "https://news.bupt.edu.cn/byyw.htm"
res = requests.get(url)
res.encoding = 'utf-8'
Soup = BeautifulSoup(res.text,'lxml')
data = Soup.find_all('h3',attrs={'class':'tit3'})
for i in data:
    title = i.a.get_text()
    link  = i.a['href']#用于获取a标签中的href属性值
    print({'标题':title,
          '链接':link})

关于BeautifulSoup的更多用法可以参考BeautifulSoup的基本使用方法
这里主要介绍:
①利用lxml解析器初始化Beautiful Soup
②find_all():查询所有符合条件的元素。给它传入一些属性或文本,就可以得到符合条件的元素;
③获取节点属性的值。

①利用lxml解析器初始化Beautiful Soup:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>Hello</p>', 'lxml')
print(soup.p.string)

输出:

Hello

②find_all():查询所有符合条件的元素。给它传入一些属性或文本,就可以得到符合条件的元素。
find_all函数如下:

find_all(name , attrs , recursive , text , **kwargs)

这里用到name,attrs。
name是节点名,即利用节点名来查询。比如h1,h2,h3表示三种大小标题,p表示段落,a表示链接等等,更多节点名–>html标签大全
attrs是属性,即传入一些属性来查询。

html='''
<div class="panel">
    <ul class="list" id="list-1" name="elements">
        <li class="element">Chen</li>
    </ul>
    <ul class="list list-small" id="list-2">
        <li class="element">Ruan</li>
    </ul>   
</div>
'''
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'lxml')
print(soup.find_all(attrs={'id': 'list-1'}))

输出:(即id=“list-1” 的元素)

[<ul class="list" id="list-1" name="elements">
<li class="element">Chen</li>
</ul>]

③获取节点属性的值

link  = i.a['href']#节点为a(链接),属性为href

以上就是如何获取静态网页的内容。

最终方法1和方法2得到的结果一样。

{'标题': '北京邮电大学举行集成电路学科发展研讨会', '链接': 'info/1012/27178.htm'}
{'标题': '两会上的北邮声音——孟洛明委员:“关于进一步改善重大科技项目立项质量...', '链接': 'info/1012/27175.htm'}
{'标题': '北京邮电大学召开2021年工会工作评优表彰会', '链接': 'info/1012/27162.htm'}
{'标题': '校长徐坤率队赴北京燕东微电子股份有限公司考察', '链接': 'info/1012/27161.htm'}
{'标题': '北京邮电大学党委召开落实教育部党组巡视整改工作部署会议', '链接': 'info/1012/27151.htm'}
{'标题': '学校召开党委会(扩大)会议', '链接': 'info/1012/27148.htm'}

搞定!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值