Python爬取网页数据

Python爬取静态网页的方法:

#导入包
import requests

#构造url地址
url = 'https://ssr1.scrape.center/page/1'
#构造请求头的信息(防止它发现我是爬虫)
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0'
}

#发送请求
response = requests.get(url=url,headers=headers)
#print(response.status_code)      #状态码
#print(response.text)             #文本内容

#如果有的时候看.test是乱码,我们可以把内容转化为二进制然后再将二进制转码为utf-8的。
print(response.content)         #二进制内容
print(response.content.decode('utf-8'))         #二进制内容

如果有时候运行.test是乱码,我们可以把内容转化为二进制(.content)然后再将二进制转码为utf-8(.content.decode('utf-8'))。

数据解析:使用Xpath表达式解析网页:

(注意:此处有误,..:表示的是选取当前节点的父节点)

//:可以认为是任意门,可以任意路劲进行访问。

.//:一般用于循环中在当前url下不断进行访问。

.:在选取当前节点进行操作。

/:从该层级进行选取。

@:选取属性。

网页提取信息:

# 数据解析
# 构造一个结构化的对象,方便解析使用
tree = etree.HTML(response)                                                         # 结构化你所选取的网页,才能拿Xpath进行解析。
div_list = tree.xpath('//div[@class="el-col el-col-18 el-col-offset-3"]/div')       # 固定一个查询的父节点,对他的子节点进行采数据。
for div in div_list:
    name = div.xpath('.//h2[@class="m-b-sm"]/text()')[0]                            # 如果不加.那么会在这个父节点里把需要的h2子节点每次循环都重新查询一次。
    address = div.xpath('.//div[@class="m-v-sm info"][1]/span/text()')[0]           # xpath中[]是谓语的意思,并且[1]是定位到第一个标签的意思。但是注意后面括号外的[0]则又不一样这个则是从取第一个
    long = div.xpath('.//div[@class="m-v-sm info"][1]/span/text()')[2]
    time = div.xpath('.//div[@class="m-v-sm info"][2]/span/text()')
    # print(name)
    # print(address)
    # print(long)
    # print(time)
    print(name,address,long,time)

假设如果time中有一个电影的time是空的并且在m-v-sm info下的非第一个span目录下(比如是第二个span)那么我们在提取电影time的时候

 time = div.xpath('.//div[@class="m-v-sm info"][2]/span/text()')[1]

这段代码则会报错,因为这一段代码中的time有空[ ],所以会出现list index out of range列表索引超出范围的错误。

那么我们可以采取一下方法避免这种错误:

href是一段url地址,是后半段部分,前半段就是这个网页的地址。

若是要给数据前面加上标题的话,我们需要用csv.DictWriter()而不能用csv.Writer(),只有csv.DictWriter()有filename这个属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的小晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值