当前位置:网站首页 > R语言数据分析 > 正文

codetop题库(topcoder题库)



本文主要是通过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

到此这篇codetop题库(topcoder题库)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • ettercap下载和安装(etisalatapp安装)2025-03-17 16:36:05
  • chronyc sources显示的结果(chronyc sourcestats)2025-03-17 16:36:05
  • resnet网络代码(resnets)2025-03-17 16:36:05
  • rbac权限模型图(rbac权限系统设计)2025-03-17 16:36:05
  • 查看yarn进程(查看yarn application)2025-03-17 16:36:05
  • git clone在哪里(git clone —recursive)2025-03-17 16:36:05
  • straw的用法(steward用法)2025-03-17 16:36:05
  • resnet50和resnet18(resnet50和resnet18区别)2025-03-17 16:36:05
  • aipods蓝牙耳机(airpods蓝牙耳机)2025-03-17 16:36:05
  • ifstream和ofstream(ifstream和ofstream创建的文件在那里)2025-03-17 16:36:05
  • 全屏图片