本文主要是通过Python爬虫豆瓣音乐TOP250,这是练习爬虫的一个景点案例,里面涵盖了Web请求、HTML、数据处理、数据清洗、数据存储、异常情况处理,非常适合用来做项目和练手,喜欢的话就关注一下。持续分享爬虫技术
- requests:用于发送HTTP请求。
- lxml:用于解析HTML页面。
- pandas:用于数据存储和处理,特别是将爬取的数据保存到CSV文件中。
可以通过pip命令安装这些库:
防爬技巧:从入门到精通,保障爬虫稳定运行
headers 字典中只包含了一个键值对 ‘User-Agent’: ‘…’,这里的 ‘User-Agent’ 是一个非常重要的头部信息,它告诉服务器你的爬虫(或浏览器)的类型和版本。由于很多网站会检查请求的 User-Agent 来判断请求是否来自一个真实的浏览器,因此,在爬虫中设置合适的 User-Agent 是非常重要的,这有助于避免被网站识别为爬虫而拒绝服务(即反爬虫机制)。
代码中,User-Agent 被设置为一个常见的Chrome浏览器的用户代理字符串,这有助于让服务器认为请求是来自一个真实的Chrome浏览器用户。
requests.get(url, headers=headers) 这行代码向指定的URL发送了一个GET请求,并将 headers 字典作为请求的一部分发送给服务器。服务器根据这些头部信息来响应请求。
response.encoding = ‘utf-8’ 这行代码设置了响应内容的编码格式为UTF-8,这是为了确保能够正确地解码响应内容中的文本信息。由于网页内容可能以不同的编码格式发送,因此设置正确的编码格式对于后续处理响应内容非常重要。
请求网页内容
- requests.get(url=url, headers=header):这是requests库的一个函数,用于向指定的url发送GET请求。url参数是你想要请求的资源的URL地址。headers参数是一个字典,包含了请求头信息,这些信息可以模拟浏览器请求,帮助绕过一些简单的反爬虫机制,比如指定User-Agent来表明你的请求来自于哪个浏览器或设备。
- .text:这个属性获取了响应的文本内容,即HTML页面的源代码。requests.get()函数返回的是一个Response对象,这个对象包含了从服务器返回的所有信息,如状态码、响应头、响应体等。通过.text属性,我们可以获取到HTML页面的原始文本内容。
可以使用print(response)输出一下请求出来的内容,其实就是整个网页的HTML代码,因为太长了,这里就随便放一点
解析HTML内容:
- etree.HTML(response):这是lxml库中的etree模块的一个函数,用于将字符串形式的HTML内容解析为HTML文档树(DOM树)。这个树形结构表示了HTML页面的所有元素和它们之间的关系,便于我们进行后续的查找、修改等操作。这里的response就是上一步通过requests.get()获取的HTML页面的文本内容。
- tree:这个变量现在引用了通过etree.HTML()函数解析得到的HTML文档树。通过这个树形结构,我们可以使用lxml提供的各种查找和修改DOM的方法,比如使用XPath或CSS选择器来定位特定的HTML元素。
返回下所有 标签的href属性值列表。
使用XPath通过tree对象抓取HTML中特定元素的href属性值列表,并将其存储在tables变量中。具体路径为:从/html/body/div[3]/div[1]/div/div[1]/div/div[26]/a元素获取其@href属性值
输出结果:
列表推导式获取每页网址
- https://music.douban.com/top250?start={} 是豆瓣音乐Top 250的基础URL,其中{}是一个占位符,用于后续通过.format(i)方法填充start参数的值。
- range(0, 250, 25) 生成一个从0开始到250(不包括250)的序列,步长为25。这意味着序列中的数字将是0, 25, 50, …, 225。这个序列的每个数字代表了一个分页的起始点,豆瓣音乐Top 250每页展示一定数量的条目(可能是25条),start参数就是用来指定从哪一条条目开始展示当前页的。
简单输出一下结果看看
这样就获取到每一页了,然后只需要循环请求列表中的每一个网址就可以
获取标题
输出看下结果
看到输出的结果中标题前后都有很多空格和换行符
使用normalize-space来消除
normalize-space(…):这是一个XPath函数,用于对给定的字符串进行标准化处理,删除字符串前后的空白字符(如空格、换行符等),并将字符串中间的多个连续空白字符替换为一个空格。这对于处理从HTML文档中提取的文本非常有用,因为HTML文档中可能包含许多不必要的空白字符。
获取介绍
获取介绍文本内容
现在就获取到了介绍的内容,因为直接输出的话结果会在一个数组中,例如[‘Jason Mraz / 2008-05-13 / Import / Audio CD / 民谣’],所以tr.xpath(“td[2]/div/p/text()”)[0],使用下标获取第一个元素,变成字符串,然后对字符串进行拆分
拆分字符串
根据 / 进行拆分,现在就可以获取到 作者/发行时间/专辑类型/介质/流派 然后存储下来
变量赋值
将简介中的信息都存储下来
没有专辑类型的问题
在检查过程中发现有的歌曲可能会没有专辑类型,正常拆分出来的字符串应该有5个元素,但是如果没有专辑类型的话,那么就变成四个元素了,那么introduction_[4]就会报错,超过数组长度,所以要进行判断,如果拆分出来的数组中元素个数小于5个,那么就把专辑类型赋值为空
获取评分
获取评价人数
使用normalize-space清除空格
至此信息就获取完毕了,后面要对信息进行存储
现在已经获取到我们需要的数据,现在就是需要把数据存储到本地,通过Pandas进行存储,但是首先需要把获取到的字段存储到数组中,然后把数组的数据加入到Pandas中
定义数组存储数据
定义一个空数组,然后每次获取完字段数据之后将字段的数据存储进去
将数组添加到Pandas中
pandas写入到本地
打开本地文件查看结果
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/66568.html