爬虫日记1——百度口碑医学教育网

特征(目的网站):简单,翻页结构,无反爬

特征(爬虫框架):极简,非分布式,无数据库

目的网站:

  百度口碑医学教育网(https://koubei.baidu.com/s/med66.com?page=1&tab=comt

爬取对象:

  评论、时间、评分、内容以及评论人

爬虫框架:

  极简框架(E):包括URL管理器,HTML下载器,HTML解析器,数据存储器(未使用数据库,包括结果输出,输出为html格式)以及爬虫调度器

运行流程图:

 

主要问题及思路:

  网页解析:

  1. 内容爬取

   该网页解析较为简单,各个需要爬取的部分都有较为明显区分的标签,推荐先使用审查元素来找一下对应标 签,然后用查看源代码,利用Ctrl+F确定找出的标签是否完全对应所有的目的信息(不会多也 不会少)。唯一不同的是,评分不是标签里面的文本内容,而是在标签中的class属性中,其一般形式为"class = kb-i-small-star-X",X对应一个在0~5中取值(包括0和5)的数字。这个时候使用正则匹配找出其中代表评分的数字即可。对应的提取代码如下:

 1 scores = soup.find_all(‘i‘, class_=re.compile(r‘kb-i-small-star-\d‘))
 2         if scores is None or len(scores) == 0:
 3             data[‘score‘] = [‘无‘]
 4         else:
 5             for score in scores:
 6                 #评分在class属性里,需要提取
 7                 real_score = str(score[‘class‘])
 8                 pattern = re.compile(r‘\d‘)
 9                 result = re.search(pattern, real_score)
10                 score0.append(result.group())
11                 data[‘score‘] = score0

  2. 新链接获取

   目的是爬取该网站所有的评论、时间、评分、内容以及评论人,而源网址仅仅是其第一页的网址(网站可翻页)。无法直接从第一页的源码中获得其他页码的网址,需要另寻他法。此时注意到,每次翻页,网页URL变动都很小,如https://koubei.baidu.com/s/med66.com?page=1&tab=comt是第一页,翻到第二页时仅"page=1"变成了"page=2",于是想到了可以通过当前爬取网页构造下一个要爬取网页的URL,代码如下(来自HtmlParser.py):

1  def _get_new_urls(self, page_url, page_number):
2         new_urls = set()
3         link = ‘https://koubei.baidu.com/s/med66.com?page=%d&tab=comt‘ % page_number
4         new_urls.add(link)
5         return new_urls

在爬取上一个网页后,根据其页码数+1,构造下一个网址,爬一个加一个,直到循环结束。这是一个取巧的方法,不过应该也能应付一些简单网页。

  内容输出:

  1.输出文件格式

   为html格式。

  2.输出时遇到的问题

   重点是这一段代码:

 

1             for data in self.datas:
2                 for element in zip(data[‘time‘], data[‘score‘], data[‘user_name‘], data[‘comment‘]):
3                     fout.write("<tr>")
4                     fout.write("<td>%s<td/>" % data[‘url‘])
5                     fout.write("<td>%s<td/>" % element[0])
6                     fout.write("<td>%s<td/>" % element[1])
7                     fout.write("<td>%s<td/>" % element[2])
8                     fout.write("<td>%s<td/>" % element[3])
9                     fout.write("</tr>")

  zip()函数值得一说,通过这个函数,将data[‘time‘], data[‘score‘], data[‘user_name‘], data[‘comment‘]四个列表并入一个循环,同时还能通过下表的方式输出四个列表相同下标的元素,使得输出非常方便。

  

可改进:

  1. 对于通过页码构造新网址的办法,就本网页来说,尽管网站显示只有163页,但对于page=X,X大于163的URL也能返回结果(可能是服务器对page大于163的URL均定位到page163),且均为163页的结果。如果不是之前设置一次只爬一定数目的网站,这个问题将导致循环无法终止。同时,构造URL的方法是page+1,也就是说会对元URL对应的页码不断向后翻页,所以元URL必须是第一页(不过这个问题应该不是很难解决,但本次实验的框架实在太简单,后续估计不会使用,且一般不同网页的URL获取不会这么简单,所以没什么修改必要)。

  2. 不知道是不是未使用数据库还是电脑的原因,本工程在爬取的过程中,爬取若干数量(数量不定,也可能有可能无)网址后就会卡住不动,所以github上的爬取结果是分两次爬的,且第二个文件内容有重复(将最大爬取数目限制在163就不会有了)。

源代码:#传送门#下的Easy_project项目。

原文地址:https://www.cnblogs.com/lk-mizi/p/11638323.html

时间: 2024-11-03 19:49:52

爬虫日记1——百度口碑医学教育网的相关文章

医学教育网爬虫程序(直播)

12-18 今晚接到老姐的电话,说她已在"医学教育网"订购了不少视频,要我帮她将所有的视频都下载下来.我看了一下,里面有24门科目,每门科目有40多节.要我手动一个一个下,还不如让我去死.这种重复的事情还是让程序来做吧!这里开一篇博客直播编写的过程. 被爬网址:http://www.med66.com/ 前几天我刚做完一个Qihuiwang的爬虫软件.这次我评估了一下,这次要做的视频下载爬虫程序比上次又有新的挑战: (1)要处理登陆的过程,上一个不需要登陆就可以直接爬.这次必须要登陆才

刷百度健康评论,百度口碑【专业团队,诚信为主】找我们代刷吧

 百度健康评论,现在每家医疗的医疗推广都有在刷,都是上百条,上千条的,你还在等什么,赶紧行动吧. 现在刷百度健康评论优惠正在进行中,量大优惠更大! 刷百度健康评论[专业团队,诚信为主]找我们代刷吧. 联系QQ:343405792 百度健康评论二维码扫描: 刷百度健康评论,百度口碑[专业团队,诚信为主]找我们代刷吧,布布扣,bubuko.com

如何申请新版本百度口碑收录

在申请前请大家先看看自己的站点是否已经被收录,毕竟部分优秀的站点百度口碑会主动收录的.现在我们只需要在浏览器地址栏输入:http://koubei.baidu.com/s/你的域名,如http://koubei.baidu.com/s/boke112.com.如果出现下图所示,就表示已经被百度口碑收录了. 已被百度口碑收录 如果出现“没有找到网站,试试申请收录吧”,说明还没有被收录,这个时候我们就要主动发送邮件申请收录了. 未被百度口碑收录 经过这次boke112导航申请收录的过程得知,根据百度

医学教育网爬虫程序之——网站游走(直播)

前面我在一个博文里直播过了 www.med66.com 的登陆过程.博文:http://my.oschina.net/hevakelcj/blog/357852 成功登陆,就意味着进入了网站的大门.剩下的工作就是进去之后在里面取想到的东西. 如下就是登陆成功后的网页,我们需要从这个页面获取课程列表. 打开Firefox的调试工具,看一下上面的元素是如何布局的. 通过Firefox的调试工具很容易找到课程列表的元素,所有课程列表在 <div class="ul_con_uc_show&quo

我的第一个python爬虫程序(从百度贴吧自动下载图片)

这个学期开设了编译原理和形式语言与自动机,里面都有介绍过正则表达式,今天自己学了学用python正则表达式写爬虫 一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一个页面(通常是首页)开始,读取网页的内容,找到在网页中的其它链接地址, 然后通过这些链接地址寻找下一个网页,这样一直循环下去,直到把这个网站所有的网页都抓取完为止. 如果把整个互联网当成

Python简易爬虫爬取百度贴吧图片

通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.request.urlopen(url) html=page.read() return html 说明: 向getHtml()函数传递一个网址,就可以把整个页面下载下来. urllib.request 模块提供了读取web页面数据的接口,我们可以像读取本地文件一样读取www和ftp上的数据. 二.筛选页面

[Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(InfoBox),这也是毕业设计实体对齐和属性的对齐的语料库前期准备工作.希望文章对你有所帮助~ 源代码 1 # coding=utf-8 2 """ 3 Created on 2015-09-04 @author: Eastmount 4 """ 5

python爬虫—爬取百度百科数据

爬虫框架:开发平台 centos6.7 根据慕课网爬虫教程编写代码 片区百度百科url,标题,内容 分为4个模块:html_downloader.py 下载器 html_outputer.py 爬取数据生成html模块 html_parser 获取有用数据 url_manager url管理器 spider_main 爬虫启动代码 spider_main.py 1 #!/usr/bin/python 2 #-*- coding: utf8 -*- 3 4 import html_download

Python爬虫爬取百度贴吧的帖子

同样是参考网上教程,编写爬取贴吧帖子的内容,同时把爬取的帖子保存到本地文档: #!/usr/bin/python#_*_coding:utf-8_*_import urllibimport urllib2import reimport sys reload(sys)sys.setdefaultencoding("utf-8")#处理页面标签,去除图片.超链接.换行符等class Tool: #去除img标签,7位长空格 removeImg = re.compile('<img.*