<强> 1。写在前面强>
今天要抓取的一个网站叫做微医网站,地址为https://www.guahao.com,我们将通过python3爬虫抓取这个网址,然后数据存储到CSV里面,为后面的一些分析类的教程做准备。本篇文章主要使用的库为pyppeteer和pyquery
首先找到医生列表页
https://www.guahao.com/expert/all/全国//不限/p5
引用>这个页面显示有,75952,条数据,实际测试中,翻页到第38页,数据就加载不出来了,目测后台程序猿没有把数据返回,不过为了学习,我们忍了。
<强> 2。页面URL 强>
https://www.guahao.com/expert/all/全国//不限/p1
引用>
https://www.guahao.com/expert/all/全国//不限/p2
…
https://www.guahao.com/expert/all/全国//不限/p38数据总过38页,量不是很大,咱只需要随便选择一个库抓取就行,这篇博客,我找了一个冷门的库
https://miyakogi.github.io/pyppeteer/index.html
pyppeteer 在使用过程中,发现资料好少,很尴尬。而且官方的文档写的也不好,有兴趣的可以自行去看看。关于这个库的安装也在下面的网址中。
最简单的使用方法,在官方文档中也简单的写了一下,如下,可以把一个网页直接保存为一张图片。
进口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微医挂号网医生数据抓取