学习笔记(Python爬虫)——获取网页源代码以及属性和文本内容

一.爬取网页并获得网页源代码

1.导入requests包

(import requests)

requests是用于发起请求,请求的发起是使用http库向目标站点发起请求,即发送一个request。request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可以通过HTML表单或在网页地址后面提供参数的方法提交数据。request对象的作用是与客户端交互,收集客户端的form、cookies、超链接,或者收集服务器端的环境变量。

2.定制请求头

(header={“User-Agent”:“xxx”})

请求头中User-Agent:中如果没有user-agent客户端配置,服务器可能讲你当做一个非法用户,一般做爬虫都会加上请求头。它告诉服务器,我的设备/浏览器是什么,我从哪个页面而来

(在浏览器中的开发者工具/F12里,如果没有内容可以Ctrl+R进行刷新)

3.添加网页网址

(url='https://xxx.com/')

url='https://weibo.com/'

url地址全称是统一资源定位符,一个网页文档、一张图片、一个视频都可以用url唯一来确定。

4.设置请求方式和请求头

请求响应,获取内容。requests模块发送请求时,有两种携带参数的方法,params和data。

reponse=requests.get(url,headers=header)

(params在get请求中使用,data在post请求中使用。)

5.获取网址文本方式的响应内容,并以HTML的方式写入文件

reponse.encoding=reponse.apparent_encoding
#获取网址文本方式的相应内容
with open('weibo.html','w',encoding=str(reponse.encoding)) as f:
    f.write(reponse.text)

6.查看HTML文件(源代码)

二.获取源代码中的元素内容

1.下载LXML库

(pip install lxml)

LXML库是一款高性能的Python XML库,主要用来解析以及生成xml和html文件(解析、序列化、转换等)。

2.导入LXML库中的etree包

(import etree from lxml)

在LXML中,lxml.etree模块是最常用的HTML、XML文档解析模块。通过requests.get方法获得html源代码后,可以通过etree进行解析,进而从源代码中提取关键信息。

(etree同Beautiful Soup一样均可以解析xml和html,两者不同之处在于:etree主要通过xpath进行定位,而Beautiful Soup主要通过css进行定位。)

3.使用etree解析HTML网页内容

selector=etree.HTML(html)

4.查询标签里所需要的内容

获取文本的元素内容:

(1)查询"li"标签下的所有元素

list_all= selector.xpath('//div/ul/li')
print(list_all)

也可以简写成以下代码

list_short=selector.xpath('//li')
print(list_short)

(2)查询"li"标签下的第2个元素内容

list_2=selector.xpath('//div/ul/li[2]/a/text()')
print(list_2)

li[2]代表的是li标签下的第二个元素,text()代表的是输出此元素的文本内容。

简写成

list_2_short=selector.xpath('//li[2]/text()')
print(list_2_short)

加上"_short"可以只输入元素所属的最后一个标签,其前面的标签可以省略

获取标签的文本内容:

(1)查找出已知HTML中[li]中第一个[li]标签下的a元素文本信息

list_1=selector.xpath('//li[1]/a/text()')
print(list_1)

也可以用以下代码获取到 

list_1_element=selector.xpath('//li[1]/a/text()')[0]
print(list_1_element)

element类是通过获取Document上的元素,进而提取数据、遍历节点以及操作元素。这里的element是将第二个[li]标签下a元素的文本信息全部遍历输出。

[0]是指遍历后选择输出第一个获取到的文本信息

(2)通过class属性定位查找出已知html中[li]中的第三个[li]标签属性和a元素文本信息

list_2=selector.xpath('//li[@class="line-message"]')
print(list_2)
list_2_element=selector.xpath('//li[@class="line-message"]/a/text()')[1]
print(list_2_element)

"@"代表直接定位到[li]标签中class属性里带有line-message的位置

(3)通过herf属性定位查找出已知HTML中[li]中第4个标签属性及a元素的文本信息

list_3=selector.xpath('//*/li[4]/a[@href="link4.html"]')
print(list_3)
list_3_element=selector.xpath('//*/li[4]/a[@href="link4.html"]/text()')[0]
print(list_3_element)

"*"可以代写[li]标签以上级的所有标签

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值