0


使用爬虫爬取Python中文开发者社区基础教程的数据

在这里插入图片描述


👨‍💻个人主页:@开发者-曼亿点

👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!

👨‍💻 本文由 曼亿点 原创

👨‍💻 收录于专栏:机器学习

⭐🅰⭐

请添加图片描述


文章目录


⭐前言⭐

   Python中文开发者社区是一个Python开发者学习交流的社区门户网站,也是一个非营利性的公益网站,它致力于壮大Python中国开发者群体,帮助Python开发者解决开发中遇到的各种问题。本任务将带领大家编写Python程序,利用beautifulsoup4库,爬取Python中文开发者社区基础教程的数据。


🎶一、网页基础


1.HTML

  超文本标记语言(hyper text marked language,HTML)是一种用于描述网页的语言。它通过不同类型的标签来描述不同的元素,各种标签通过不同的排列和嵌套形成网页的框架。有的标签还带有属性参数,其语法格式如下。

常用的标签如表所示。
在这里插入图片描述
在这里插入图片描述
【温馨提示】:打开浏览器的开发者工具窗口,选择“Elements”选项,即可查看HTML源代码
在这里插入图片描述

2.HTML DOM

   文档对象模型(document object model,DOM)定义了访问HTML和可扩展标记语言(extensible markup language,XML)文档的标准。HTML DOM将HTML文档呈现为带有元素、属性和文本的树结构(也称为节点树),如图所示。
在这里插入图片描述


🎶二、beautifulsoup4库


1.beautifulsoup4基本用法

   beautifulsoup4库也称为Beautiful Soup库或bs4库,用于解析HTML或XML文档。beautifulsoup4库不是Python内置的标准库,使用之前需要安装。

   beautifulsoup4库中最重要的是BeautifulSoup类,它的实例化对象相当于一个页面。解析网页时,需要使用BeautifulSoup()创建一个BeautifulSoup对象,该对象是一个树形结构,包含了HTML页面中的标签元素,如、等。也就是说,HTML中的主要结构都变成了BeautifulSoup对象的一个个属性,然后可通过“对象名.属性名”形式获取该对象的第一个属性值(即节点)。
【温馨提示】: BeautifulSoup对象的属性名与HTML的标签名相同,HTML常用的标签见表。

  每一个HTML标签在beautifulsoup4库中又是一个对象,称为Tag对象,它有4个常用属性,如表3所示。
在这里插入图片描述
  其中,attrs返回的是标签的所有属性组成的字典类型的数据,可通过“atrrs[‘属性名’]”形式获取属性值。

【例1】爬取链家租房网站的内容(网址https://bj.lianjia.com/zufang/),通过beautifulsoup4库解析网页,输出第一个li节点的类型、内容及其属性等信息。
【问题分析】 在Google Chrome浏览器中访问https://bj.lianjia.com/zufang/,查看并分析HTML源代码,可以看到第一个li节点的源代码,如图所示。
在这里插入图片描述
【参考代码】

import requests                #导入requests库
from bs4 import BeautifulSoup                  #从bs4库中导入BeautifulSoup模块
url ='https://bj.lianjia.com/zufang/'                  #定义url字符串
headersvalue ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',}
#发送请求,并将返回结果赋值给r
r = requests.get(url, headers=headersvalue)
#创建BeautifulSoup对象,并设置使用lxml解析器
soup =BeautifulSoup(r.text,'lxml')print('soup类型:',type(soup))                     #输出soup类型
print('“soup.li”类型:',type(soup.li))      #输出“soup.li”类型
print('第一个li节点:\n', soup.li)           #输出第一个li节点
#输出第一个li节点的name属性
print('第一个li节点的name属性:', soup.li.name)
#输出第一个li节点的contents属性
print('第一个li节点的contents属性:', soup.li.contents)
#输出第一个li节点的string属性
print('第一个li节点的string属性:', soup.li.string)
#输出第一个li节点的attrs属性
print('第一个li节点的attrs属性:', soup.li.attrs)
#输出第一个li节点的attrs属性的“class”属性值
print('第一个li节点的attrs属性的“class”属性值:',
      soup.li.attrs['class'])
#输出第一个li节点下a节点的string属性
print('第一个li节点下a节点的string属性:', soup.li.a.string)

【运行结果】 程序运行结果如图所示。

在这里插入图片描述

2.CSS选择器

  beautifulsoup4库提供了使用CSS选择器来选择节点的方法,只需调用select()方法传入相应的CSS选择器即可,常用的选择器如表所示。

在这里插入图片描述

【例2】爬取链家租房网站的内容(网址https://bj.lianjia.com/zufang/),使用CSS选择器选择节点,输出第一个房源的小区和楼层信息。
【问题分析】 在Google Chrome浏览器中访问https://bj.lianjia.com/zufang/,打开浏览器的开发者工具窗口,选择“Elements”选项后单击左上角“”按钮,然后使用鼠标选择网页中的某处,即可直接定位到HTML中对应的节点,如图所示。可以看出,第一个房源的小区信息包含在class属性值为content__list–item–des的节点下的a节点中,楼层信息包含在span节点中。
在这里插入图片描述

【参考代码】

import requests                    #导入requests库
from bs4 import BeautifulSoup    #从bs4库中导入BeautifulSoup模块
url ='https://bj.lianjia.com/zufang/'                                #定义url字符串
headersvalue ={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36',}
#发送请求,并将响应赋值给r
r = requests.get(url, headers=headersvalue)
#创建BeautifulSoup对象,并设置使用lxml解析器
soup =BeautifulSoup(r.text,'lxml')
#将class属性值为“content__list--item--des”的第一个节点赋值给node
node = soup.select('.content__list--item--des')[0]print('第一个房源小区信息:')for node_a in node.select('a'):#循环输出node节点下a节点的文本
    print(node_a.string, end=' ')
#输出node节点下span节点中的楼层信息
print('\n第一个房源楼层信息:',
      node.select('span')[0].contents[2].strip())

【运行结果】 程序运行结果如图所示。
在这里插入图片描述

完成本任务,须首先发送HTTP请求,然后将爬取到的文章按标题保存到TXT文件中,并输出每篇文章下载完成的提示。具体实现步骤如下。
  (1)定义请求的URL字符串(base_url)和请求头字典(headersvalue),其中,base_url赋值为https://www.pythontab.com/html/pythonjichu/,即Python中文开发者社区的Python基础教程首页;headersvalue包含User-Agent信息。
  (2)定义get_onepage_url(url)函数获取每一网页10篇文章的URL,并保存在列表中。
  (3)定义get_article(url)函数获取每一篇文章的内容,在其中调用towrite()函数保存文章内容,并输出下载完成提示。
  (4)定义towrite(title,content)函数将文章内容保存到TXT文件中,以文章标题命名文件保存在文件夹时,由于文件名不能包含一些特殊字符,须对文章标题中包含的特殊字符进行处理。
  (5)定义main()函数,在当前工作目录中创建“Python基础教程”文件夹,循环30次,组合网页的URL,并调用get_onepage_url()函数返回url列表,然后遍历列表,调用get_article()函数。
  (6)调用main()函数运行程序。

结束语🥇

以上就是机器学习
持续更新机器学习教程,欢迎大家订阅系列专栏🔥机器学习
你们的支持就是曼亿点创作的动力💖💖💖
请添加图片描述


本文转载自: https://blog.csdn.net/2301_77628600/article/details/143150514
版权归原作者 曼亿点 所有, 如有侵权,请联系我们删除。

“使用爬虫爬取Python中文开发者社区基础教程的数据”的评论:

还没有评论