codetop题库(topcoder题库)

codetop题库(topcoder题库)本文主要是通过 Python 爬虫豆瓣音乐 TOP250 这是练习爬虫的一个景点案例 里面涵盖了 Web 请求 HTML 数据处理 数据清洗 数据存储 异常情况处理 非常适合用来做项目和练手 喜欢的话就关注一下 持续分享爬虫技术 requests 用于发送 HTTP 请求 lxml 用于解析 HTML 页面 pandas 用于数据存储和处理 特别是将爬取的数据保存到 CSV 文件中

大家好,我是讯享网,很高兴认识大家。



本文主要是通过Python爬虫豆瓣音乐TOP250,这是练习爬虫的一个景点案例,里面涵盖了Web请求、HTML、数据处理、数据清洗、数据存储、异常情况处理,非常适合用来做项目和练手,喜欢的话就关注一下。持续分享爬虫技术

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_request
讯享网

  • requests:用于发送HTTP请求。
  • lxml:用于解析HTML页面。
  • pandas:用于数据存储和处理,特别是将爬取的数据保存到CSV文件中。

可以通过pip命令安装这些库:

防爬技巧:从入门到精通,保障爬虫稳定运行

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_开发语言_02

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元素。

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_pandas_03

返回下所有 标签的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参数就是用来指定从哪一条条目开始展示当前页的。

简单输出一下结果看看

这样就获取到每一页了,然后只需要循环请求列表中的每一个网址就可以

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_request_04

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_pandas_05

获取标题

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_开发语言_06

输出看下结果

看到输出的结果中标题前后都有很多空格和换行符

使用normalize-space来消除

normalize-space(…):这是一个XPath函数,用于对给定的字符串进行标准化处理,删除字符串前后的空白字符(如空格、换行符等),并将字符串中间的多个连续空白字符替换为一个空格。这对于处理从HTML文档中提取的文本非常有用,因为HTML文档中可能包含许多不必要的空白字符。

获取介绍

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_request_07

获取介绍文本内容

现在就获取到了介绍的内容,因为直接输出的话结果会在一个数组中,例如[‘Jason Mraz / 2008-05-13 / Import / Audio CD / 民谣’],所以tr.xpath(“td[2]/div/p/text()”)[0],使用下标获取第一个元素,变成字符串,然后对字符串进行拆分

拆分字符串

根据 / 进行拆分,现在就可以获取到 作者/发行时间/专辑类型/介质/流派 然后存储下来

变量赋值

将简介中的信息都存储下来

没有专辑类型的问题

在检查过程中发现有的歌曲可能会没有专辑类型,正常拆分出来的字符串应该有5个元素,但是如果没有专辑类型的话,那么就变成四个元素了,那么introduction_[4]就会报错,超过数组长度,所以要进行判断,如果拆分出来的数组中元素个数小于5个,那么就把专辑类型赋值为空

获取评分

获取评价人数

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_request_08

使用normalize-space清除空格

至此信息就获取完毕了,后面要对信息进行存储

现在已经获取到我们需要的数据,现在就是需要把数据存储到本地,通过Pandas进行存储,但是首先需要把获取到的字段存储到数组中,然后把数组的数据加入到Pandas中

定义数组存储数据

定义一个空数组,然后每次获取完字段数据之后将字段的数据存储进去

将数组添加到Pandas中

pandas写入到本地

打开本地文件查看结果

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_爬虫_09

Python爬虫实战:豆瓣TOP250,从底层到代码的超详细讲解,新手看完必会!_request_10

小讯
上一篇 2025-06-12 20:15
下一篇 2025-05-02 07:30

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/180654.html