软件系统开发定制Python爬虫学习-简单爬取网页数据

软件系统开发定制疫情宅家无事,软件系统开发定制就随便写一些随笔吧QwQ…

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

  软件系统开发定制以网页为例,假设我们要爬取的部分数据如下图所示:

一、准备工作

  1.导入和requests库:

from bs4 import BeautifulSoupimport requests
  • 1
  • 2

  2.要想获得网页html内容,我们首先需要用库的.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)
  • 1
  • 2
  • 3

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

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

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

my_page = BeautifulSoup(html, 'lxml')
  • 1

  其实这里得到的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可以认为是一个list    is_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')    fbbw = my_a[0].text    #注:也可用.contents[0]或者.get_text()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

  用以实现爬取“是否属于医保”等条目冒号后面的内容。

  如何查找find_all()参数值?
  选中需要查找的内容并右键单击,选择“检查”,进入开发者模式,可看到相关内容的html代码如下图所示:

  可见,我们想爬的内容首先在一个class属性为“list_left”的div标签内—>在该div标签内又可发现想爬的内容在class属性为“disease_basic”的列表元素ul标签内—>在ul标签内可以发现我们想要的内容就分别藏在几个span标签内。

三、完整代码

# coding = utf-8from bs4 import BeautifulSoupimport requestsheaders = {'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 list    is_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])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发