侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python微医挂号网医生数据抓取

Python  /  管理员 发布于 7年前   155

1. 写在前面

今天要抓取的一个网站叫做微医网站,地址为 https://www.guahao.com ,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做准备。本篇文章主要使用的库为pyppeteer 和 pyquery

首先找到 医生列表页

https://www.guahao.com/expert/all/全国/all/不限/p5 

这个页面显示有 75952 条数据 ,实际测试中,翻页到第38页,数据就加载不出来了,目测后台程序猿没有把数据返回,不过为了学习,我们忍了。

2. 页面URL

https://www.guahao.com/expert/all/全国/all/不限/p1
https://www.guahao.com/expert/all/全国/all/不限/p2
...
https://www.guahao.com/expert/all/全国/all/不限/p38

数据总过38页,量不是很大,咱只需要随便选择一个库抓取就行,这篇博客,我找了一个冷门的库
pyppeteer 在使用过程中,发现资料好少,很尴尬。而且官方的文档写的也不好,有兴趣的可以自行去看看。关于这个库的安装也在下面的网址中。

https://miyakogi.github.io/pyppeteer/index.html

最简单的使用方法,在官方文档中也简单的写了一下,如下,可以把一个网页直接保存为一张图片。

import asynciofrom pyppeteer import launchasync def main():  browser = await launch() # 运行一个无头的浏览器  page = await browser.newPage() # 打开一个选项卡  await page.goto('http://www.baidu.com') # 加载一个页面  await page.screenshot({'path': 'baidu.png'}) # 把网页生成截图  await browser.close()asyncio.get_event_loop().run_until_complete(main()) # 异步

我整理了下面的一些参考代码,你可以 做一些参考。

browser = await launch(headless=False) # 可以打开浏览器await page.click('#login_user') # 点击一个按钮await page.type('#login_user', 'admin') # 输入内容await page.click('#password') await page.type('#password', '123456')await page.click('#login-submit')await page.waitForNavigation() # 设置浏览器窗口大小await page.setViewport({  'width': 1350,  'height': 850})content = await page.content() # 获取网页内容cookies = await page.cookies() # 获取网页cookies

3. 爬取页面

运行下面的代码,你就可以看到控制台不断的打印网页的源码,只要获取到源码,就可以进行后面的解析与保存数据了。如果出现控制不输出任何东西的情况,那么请把下面的

await launch(headless=True) 修改为 await launch(headless=False)

import asynciofrom pyppeteer import launchclass DoctorSpider(object):  async def main(self, num):    try:      browser = await launch(headless=True)      page = await browser.newPage()      print(f"正在爬取第 {num} 页面")      await page.goto("https://www.guahao.com/expert/all/全国/all/不限/p{}".format(num))      content = await page.content()      print(content)    except Exception as e:      print(e.args)    finally:      num += 1      await browser.close()      await self.main(num)  def run(self):    loop = asyncio.get_event_loop()    asyncio.get_event_loop().run_until_complete(self.main(1))if __name__ == '__main__':  doctor = DoctorSpider()  doctor.run()

4. 解析数据

解析数据采用的是pyquery ,这个库在之前的博客中有过使用,直接应用到案例中即可。最终产生的数据通过pandas保存到CSV文件中。

import asynciofrom pyppeteer import launchfrom pyquery import PyQuery as pqimport pandas as pd # 保存csv文件class DoctorSpider(object):  def __init__(self):    self._data = list()  async def main(self,num):    try:      browser = await launch(headless=True)      page = await browser.newPage()      print(f"正在爬取第 {num} 页面")      await page.goto("https://www.guahao.com/expert/all/全国/all/不限/p{}".format(num))      content = await page.content()      self.parse_html(content)      print("正在存储数据....")      data = pd.DataFrame(self._data)      data.to_csv("微医数据.csv", encoding='utf_8_sig')    except Exception as e:      print(e.args)    finally:      num+=1      await browser.close()      await self.main(num)  def parse_html(self,content):    doc = pq(content)    items = doc(".g-doctor-item").items()    for item in items:      #doctor_name = item.find(".seo-anchor-text").text()      name_level = item.find(".g-doc-baseinfo>dl>dt").text() # 姓名和级别      department = item.find(".g-doc-baseinfo>dl>dd>p:eq(0)").text() # 科室      address = item.find(".g-doc-baseinfo>dl>dd>p:eq(1)").text() # 医院地址      star = item.find(".star-count em").text() # 评分      inquisition = item.find(".star-count i").text() # 问诊量      expert_team = item.find(".expert-team").text() # 专家团队      service_price_img = item.find(".service-name:eq(0)>.fee").text()      service_price_video = item.find(".service-name:eq(1)>.fee").text()      one_data = {        "name": name_level.split(" ")[0],        "level": name_level.split(" ")[1],        "department": department,        "address": address,        "star": star,        "inquisition": inquisition,        "expert_team": expert_team,        "service_price_img": service_price_img,        "service_price_video": service_price_video      }      self._data.append(one_data)  def run(self):    loop = asyncio.get_event_loop()    asyncio.get_event_loop().run_until_complete(self.main(1))if __name__ == '__main__':  doctor = DoctorSpider()  doctor.run()

总结一下,这个库不怎么好用,可能之前没有细细的研究过,感觉一般,你可以在多尝试一下,看一下是否可以把整体的效率提高上去。

数据清单:

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家的支持。如果你想了解更多相关内容请查看下面相关链接


  • 上一条:
    python+pyqt5实现KFC点餐收银系统
    下一条:
    Python实现查找二叉搜索树第k大的节点功能示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客