学习笔记(Python爬虫)

您所在的位置:网站首页 python的学习内容 学习笔记(Python爬虫)

学习笔记(Python爬虫)

2024-07-11 14:57| 来源: 网络整理| 查看: 265

一.爬取网页并获得网页源代码 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]标签以上级的所有标签



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3