当前位置:   article > 正文

学习笔记(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的方式写入文件

  1. reponse.encoding=reponse.apparent_encoding
  2. #获取网址文本方式的相应内容
  3. with open('weibo.html','w',encoding=str(reponse.encoding)) as f:
  4. 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"标签下的所有元素

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

也可以简写成以下代码

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

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

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

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

简写成

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

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

获取标签的文本内容:

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

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

也可以用以下代码获取到 

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

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

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

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

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/838370
推荐阅读
相关标签
  

闽ICP备14008679号