Python爬虫学习-简单爬取网页数据

article/2025/10/22 16:00:45

疫情宅家无事,就随便写一些随笔吧QwQ…

  这是一篇介绍如何用Python实现简单爬取网页数据并导入MySQL中的数据库的文章。主要用到BeautifulSoup requests 和 pymysql。

  以网页https://jbk.39.net/mxyy/jbzs/为例,假设我们要爬取的部分数据如下图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/048e76ad710242a5b7737714b0f11f1b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXz

一、准备工作

  1.导入BeautifulSoup和requests库:

from bs4 import BeautifulSoup
import requests

  2.要想获得网页html内容,我们首先需要用requests库的.get()方法向该网页的服务器构造并发送一个请求。requests.get()方法需要传递两个参数,一个是网页的url,在这里显然是https://jbk.39.net/mxyy/jbzs/;另一个参数是浏览器的header。查看方法如下:
  点击进入任意一个网页页面,按F12进入开发者模式,点击Network再刷新网页。在Network下的Name中任意点击一个资源,在右侧的Headers版块中下拉到最后,可以看见Request Headers参数列表最后有一个user-agent,其内容就是我们要找的浏览器headers参数值。
在这里插入图片描述
  有了url和headers我们就可以利用requests.get()向服务器发送请求了:

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}
url = "https://jbk.39.net/mxyy/jbzs/"
r = requests.get(url, headers = headers)

  使用requests.get()方法会先构造一个向服务器请求资源的url对象然后从服务器返回一个包含服务器资源的Response对象,其中包含从服务器返回的所有相关资源(自然也包括我们所需的html)。
  获取网页的html内容:

html = r.content.decode('utf-8', 'ignore')

  解释:这里r.content返回“Content of the response, in bytes.”即返回HTTP响应内容(Response)的字节形式。因此我们需要使用.decode()方法来解码。这里ignore参数可要可不要,仅仅是为了忽略一些不重要的错误。
  有了html文本我们就可以把bs拿出来溜了:

my_page = BeautifulSoup(html, 'lxml')

  其实这里得到的my_page和html内容几乎一致,那么为什么还要用bs再次解析html呢?答:Beautiful Soup 是用Python写的一个HTML/XML的解析器,它可以很好的处理不规范标记并生成剖析树(Parse Tree)。 它提供简单又常用的导航(Navigating),搜索以及修改剖析树的操作,可以大大节省你的编程时间。也就是说,我们爬取数据需要用到的一些定位方法只有经由bs解析后返回的内容才能使用,单纯的html文本是不具备这样的方便快捷的方法的。

二、开始爬取数据

  在这里我们用到的方法主要是find | find_all | findAll | get_text() | text。
  1.find_all方法:
在这里插入图片描述  功能是查找该页面元素的所有子元素并且将寻找到的符合查找结果的子元素以列表的形式返回。
  2.find方法:
  与find_all差不多,但是只返回第一个与查找条件匹配的子元素,且仅返回文本,不以列表形式返回。
  3.get_text()和.text方法:
  用来提取标签中的文本信息。
  ps:get_text()和.text方法的区别:
  beautifulsoup中,对外接口,没有提供text这个属性,只有string这个属性值;beautifulsoup内部才有text这个属性,只供内部使用 –> 如果你想要用text值,应该调用对应的get_text();而你之所有能够直接用soup.text而没报错,应该是和python的class的property没有变成private有关系 –>导致你外部也可以访问到这个,本身是只供内部使用的属性值。
  4.具体实现示例:

for tag in my_page.find_all('div', class_='list_left'):sub_tag = tag.find('ul',class_="disease_basic") my_span = sub_tag.findAll('span')#my_span可以认为是一个listis_yibao = my_span[1].text othername = my_span[3].text fbbw = my_span[5].textis_infect = my_span[7].text dfrq = my_span[9].text my_a = sub_tag.findAll('a')fbbw = my_a[0].text#注:也可用.contents[0]或者.get_text()

  用以实现爬取“是否属于医保”等条目冒号后面的内容。
在这里插入图片描述
  如何查找find_all()参数值?
  选中需要查找的内容并右键单击,选择“检查”,进入开发者模式,可看到相关内容的html代码如下图所示:
在这里插入图片描述
  可见,我们想爬的内容首先在一个class属性为“list_left”的div标签内—>在该div标签内又可发现想爬的内容在class属性为“disease_basic”的列表元素ul标签内—>在ul标签内可以发现我们想要的内容就分别藏在几个span标签内。

三、完整代码

# coding = utf-8
from bs4 import BeautifulSoup
import requests
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.101 Safari/537.36'}
url = "https://jbk.39.net/mxyy/jbzs/"
r = requests.get(url, headers = headers)
html = r.content.decode('utf-8', 'ignore')
my_page = BeautifulSoup(html, 'lxml')for tag in my_page.find_all('div', class_='disease'):   disease = tag.find('h1').get_text()disease_name = diseasefor tag in my_page.find_all('p', class_='introduction'):introduction = tag.get_text()disease_introduction = introductionfor tag in my_page.find_all('div', class_='list_left'):sub_tag = tag.find('ul',class_="disease_basic") my_span = sub_tag.findAll('span')#my_span is a listis_yibao = my_span[1].text    #是否医保othername = my_span[3].text   #别名fbbw = my_span[5].text        #发病部位is_infect = my_span[7].text   #传染性dfrq = my_span[9].text        #多发人群my_a = sub_tag.findAll('a')xgzz = my_a[2].text+' '+my_a[3].text+' '+my_a[4].text  #相关症状#ps: .contents[0] or .get_text() is also accepted# Some tests:
# print(html)
# print(my_page)
# print(sub_tag)
# print(xgzz)
# print(my_span)
# print(my_span[1])

http://chatgpt.dhexx.cn/article/VNghXMDj.shtml

相关文章

Python爬取网页数据

都说python爬网页数据方便,我们今天就来试试,python爬取数据到底有多方便 简介 爬取数据,基本都是通过网页的URL得到这个网页的源代码,根据源代码筛选出需要的信息 准备 IDE:pyCharm 库:requests、lxml…

Python爬虫爬取数据

我是Python小白,我会用比较通俗易懂的方法告诉你如何去爬取数据。 一开始,我们需要pycharm(也就是我们编代码的工具),其次我们需要打开我们需要爬取数据的网页,我以鞋子为例。 那么,接下来就开…

如何使用Python爬虫抓取数据?

Python爬虫应用十分广泛,无论是各类搜索引擎,还是日常数据采集,都需要爬虫的参与。其实爬虫的基本原理很简单,今天小编就教大家如何使用Python爬虫抓取数据,感兴趣的小伙伴赶紧看下去吧! 工具安装 首先需要…

Python爬虫:高效采集数据的几种方法

作为互联网时代的新生力量,爬虫技术已经成为了各行各业不可或缺的一环。那么,如何高效地获取网络数据呢?本文将从以下十个方面逐步分析讨论。 一、基于HTTP协议的爬虫 HTTP协议是目前互联网上使用最广泛的协议,基于此协议的爬虫…

unity3d 收费模式_unity3d中的访客模式

unity3d 收费模式 抽象 (Abstract) Game development as a discipline is challenging on its own compared to traditional software development. The ability to solve performance-related, architectural and other challenges is often the key to success in the field.…

狼人杀微信小程序项目实例(附源码)

一、项目展示 狼人杀是一款多人参与的,通过语言描述推动、较量口才和分析判断能力的策略类桌面游戏 玩家人数适于4-18人参与 主要角色有:狼人 、预言家 、平民 、女巫 、猎人 、白痴 、守卫 、骑士等 同时还有众多的玩家形象 各角色的职能介绍 设置游戏…

python获取游戏窗口_python中pygame针对游戏窗口的显示方法实例分析(附源码)

本文实例讲述了python中pygame针对游戏窗口的显示方法。分享给大家供大家参考,具体如下: 在这篇教程中,我将给出一个demo演示: 当我们按下键盘的‘f’键的时候,演示的窗口会切换到全屏显示和默认显示两种显示模式 并且在后台我们可以看到相关的信息输出: 上面给出了一个简…

unity3d之按秒倒计时

image.png 按秒倒计时 自定义变量计时 在程序中定义变量来累计时间。 实例代码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI;public class textTimer : MonoBehaviour {// Start is called before the first frame …

【开发工具】如何使用JetBrains Rider更好的开发Unity程序

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客QQ群:1040082875 一、前言 JetBrains Rider是一款快速强大的C#编辑器,也就是俗称的IDE。有2500多项的智能代码检查与重构,更加迅速编写和零误差的代码。完美集成与Unity…

Unity制作类胡闹厨房游戏 KitchenChaos 笔记整理

本文章是油管上CodeMonkey的一个unity项目KitchenChaos的笔记整理,学习并整理这个项目主要是因为终于看到了一个比较完整地用到了unity的各种功能、风格较为清爽的、代码结构清晰的同时比较新的项目。在学习之后也确实有很大的收获,首先通过该教程第一次…

unity python热更新_Unity C#热更新方案 ILRuntime学习笔记(一) Hello World

一、ILRuntime介绍 问:什么是热更新? 答:软件在使用时就能实现更新的方式就叫做热更新。热更新无需用户重新下载安装或重启,在使用时即可更新,方便快捷体验良好。 问:什么是ILRuntime? 答:ILRuntime是一个…

基于mediapipe的动作捕捉和Unity的球棍模型同步

基于mediapipe的动作捕捉和Unity的球棍模型同步 所需环境python端unity端效果 所需环境 这是我所使用的环境 python3.9 安装mediapipe和opencv-python包 python和Unity通信使用socket Unity2021.3 python端 如何安装那两个包我就不说了,大家有不明白可以去百度 m…

unity 原型_使用Unity和React快速进行原型制作

unity 原型 Web applications are great way to quickly reach a lot of users without the hassle of native client installs and play store downloads. Web frameworks such as React allow page components to communicate and respond to user interaction much like tra…

使用 命令行/WinForm 来打包Unity可执行程序

使用 命令行/WinForm 来打包Unity可执行程序 前言一、编辑Editor打包工具1.编辑打包脚本2.Unity编辑器中样式 二、命令行调用Unity打包函数1.Unity命令行常用参数2.命令行调用静态打包函数 三、使用WinForm创建可视化操作界面1.可视化界面2.代码详细:①CmdHelper类&…

Unity + Jenkins自动打包 (二)构建Jenkins项目以及编写Python、Unity脚本

1、新建Jenkens项目 在上一篇中,完成了Jenkins的安装和初始化,以及权限设置。 查看上一篇:Jenkins安装 点此 现在打开浏览器,输入http://localhost:8081,当然,需要改成你自己设置的Jenkins端口号&#xff…

unity python服务器_Unity如何连接服务器: 一个简单的例子

Unity3D本身是用来做客户端的通用游戏引擎, 要建立网络连接的话, 其实需要使用的是C#本身的网络和线程模块, 即System.Net.Sockets & System.Threading. 本文中我做了一个简单的例子, 适合那些需要做Unity客户端连接服务器功能的人入门. 整体项目 客户端: 我做的项目主要是…

unity + python socket通信,自定义数据包

unity和python相互之间通过socket通信来发送自定义数据包是一个利用unity构建场景和通过python来做数据处理的方式,能够有效的利用两种不同语言的优势。 我已经将对应的操作封装为对应的一个模块,SocketTools.cs,我们先来看一下具体的代码用…

假设电话收费标准为: (1)国际长途1.00元/分钟,(2) 国内长途0.60元/分钟,(3)市话前3分钟0.20元,3分钟以后0.10元/分钟。现假设某话单文件中每条话单包含如下信息:通话日期(10

你好,帮我做个C语言题目 你好,我是Assistant。很高兴为您做题。 请提供题目的完整题面,并提供任何相关的输入、输出、约束条件等信息。 如果您有任何其他问题,请随时与我联系。我将竭诚为您服务。 897354667qq.com 假设电话收…

电商用户行为数据分析实战(MySQL +PowerBI)

目录 一、项目概况二、数据源三、数据清洗3.1 选择子集导入,匹配适合的数据类型3.2 列重命名3.3重复值处理3.4 缺失值处理3.5 异常值处理从timestamps字段中提取日期数据列查看日期列数据异常情况 四、数据分析4.1 整体购物情况,基于AARRR模型4.1.1 各字…

【业务数据分析】——十大常用数据分析方法

🤵‍♂️ 个人主页:Lingxw_w的个人主页 ✍🏻作者简介:计算机科学与技术研究生在读 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 &#x1f4a…