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

  

<强> 1。写在前面

  

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

  

首先找到医生列表页

  
  

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

     

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

  

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

  

<强> 2。页面URL

  
  

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

     

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

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

  

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

        进口asyncio   从pyppeteer进口发射   异步def main ():   浏览器=等待发射()#运行一个无头的浏览器   页面=等待browser.newPage() #打开一个选项卡   等待page.goto (“http://www.baidu.com”) #加载一个页面   等待页面。截图({“路径”:“baidu.png”}) #把网页生成截的图   等待browser.close ()   asyncio.get_event_loop () .run_until_complete (main()) #异步      

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

        浏览器=等待发射(无头=False) #可以打开浏览器   等待page.click (# login_user) #点击一个按钮   等待页面。类型(“# login_user”、“管理”)#输入内容   等待page.click(“#密码”)   等待页面。类型(“#密码”、“123456”)   等待page.click (“# login-submit”)   等待page.waitForNavigation ()   #设置浏览器窗口大小   等待page.setViewport ({   “宽度”:1350年,   “高度”:850   })   内容=等待page.content() #获取网页内容   饼干=等待page.cookies() #获取网页饼干      

<强> 3。爬取页面

  

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

  

<代码>等待发射(无头=True) 修改为<代码>等待发射(无头=False)

        进口asyncio   从pyppeteer进口发射   类DoctorSpider(对象):   异步def主要(自我,num):   试一试:   浏览器=等待发射(无头=True)   页面=等待browser.newPage ()   打印(f”正在爬取第{num}页面”)   等待page.goto (" https://www.guahao.com/expert/all/全国/所有/不限/p {} " .format (num))   内容=等待page.content ()   打印(内容)   除了例外e:   打印(e.args)   最后:   num +=1   等待browser.close ()   等待self.main (num)   def运行(自我):   循环=asyncio.get_event_loop ()   asyncio.get_event_loop () .run_until_complete (self.main (1))   if __name__==癬_main__”:   医生=DoctorSpider ()   doctor.run ()      

<强> 4。解析数据

  

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

        进口asyncio   从pyppeteer进口发射   从pyquery进口pyquery pq   熊猫作为pd导入#保存csv文件   类DoctorSpider(对象):   def __init__(自我):   自我。_data=https://www.yisu.com/zixun/list ()   异步def主要(自我,num):   试一试:   浏览器=等待发射(无头=True)   页面=等待browser.newPage ()   打印(f”正在爬取第{num}页面”)   等待page.goto (" https://www.guahao.com/expert/all/全国/所有/不限/p {} " .format (num))   内容=等待page.content ()   self.parse_html(内容)   打印(“正在存储数据....”)   data=https://www.yisu.com/zixun/pd.DataFrame (self._data)   data.to_csv(“微医数据。csv”,编码=' utf_8_sig ')   除了例外e:   打印(e.args)   最后:   num +=1   等待browser.close ()   等待self.main (num)   def parse_html(自我、内容):   医生=pq(内容)   项=doc (“.g-doctor-item”) . items ()   项目的项目:   # doctor_name=item.find (“.seo-anchor-text”)。text ()   name_level=item.find (.g-doc-baseinfo> dl> dt)。text() #姓名和级别   部门=item.find (“.g-doc-baseinfo> dl> dd> p:情商(0)”)。text() #科室   地址=item.find (“.g-doc-baseinfo> dl> dd> p:情商(1)”)。text() #医院地址   明星=item.find (”。star-count em”)。text() #评分   宗教法庭=item.find (”。star-count我”)。text() #问诊量   expert_team=item.find (“.expert-team”)。text() #专家团队   service_price_img=item.find (“.service-name:情商(0)祝辞.fee”)。text ()   service_price_video=item.find (“.service-name:情商(1)祝辞.fee”)。text ()   alt=" Python微医挂号网医生数据抓取">

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