Python3爬虫实战:爬取大众点评网某地区所有酒店相关信息
来源:互联网 发布:网络流行语2016搞笑 编辑:程序博客网 时间:2024/04/30 02:41
历时一下午加一晚上,终于把这个爬虫代码写好,后面还有很多想完善的地方(譬如数据存储用redis、使用多线程加快速度、爬取图片、细分数据等等),待有空再做更改,下面是具体的步骤与思路:
工具:PyCharm、Google Chrome开发者工具、fiddle2
平台:Python3.4
一、进入大众点评首页默认的地区是上海地区,所以干脆直接进入上海地区酒店首页从这里开始爬数据
我完成的任务很简单,分为两步:
1、爬取点评网上海地区所有酒店的主页地址,保存下来
2、对于每一个酒店,爬取所有对其评价的顾客的信息(id、name),评价情况(房间、环境、服务、评价时间等),综合评价情况等等,并保存
二、代码编写
1、我们可以看到,酒店主页的每一页都有很多酒店,每一页的url都是如下形式:
http://www.dianping.com/shanghai/hotel/pn
其中n是指页数(1-50),这样我们就可以遍历所有页面,找到所有酒店,如下:
for k1 in range(0,50): tempurlpag = "http://www.dianping.com/shanghai/hotel/p"+str(pagelist[k1]) #queuepag.append(tempurlpag) #下面对于当前页拿到每个酒店网址并加入队列 op = opener.open(tempurlpag) if 'html' not in op.getheader('Content-Type'): continue data1 = op.read().decode(encoding='UTF-8') # onclick="window.open('/shop/2503441') linkre = re.compile(r'onclick="window.open\(\'(.*?)\'\)', re.DOTALL).findall(data1) for k2 in range(0, len(linkre)): tempurlhotel = "http://www.dianping.com" + linkre[k2] queue.append(tempurlhotel) fileOp.write(tempurlhotel+'\n') #print('目前是第: %d 页的第: %d 个酒店,其地址是 :%s'%(k1+1,k2+1,tempurlhotel)) print('第: %d 页抓取完成!'%k1)
运行过程如下:
输出文件如下:
可以看到点评网以游客身份登录给的750条酒店信息全部抓取到(游客登录只显示50页数据,不知道用户登录是不是酱紫,爬虫的login请参考上上篇博客)
2、我把所有酒店主页放到了队列里,这里用了常用的deque模块,为了防止网站禁止爬虫,所以在post的时候要把爬虫伪装成浏览器(详见前几篇博客)
对于每个酒店read到的数据,下面是获取评价用户name的示例:
# <a target="_blank" rel="nofollow" href="/member/8450012" user-id="8450012" class="J_card"> # <img title="灵燕儿" alt="灵燕儿" src="http://i2.dpfile.com/pc/0ffc32ea67e4e872fc50ec7c04effcec(48#c48)/thumb.jpg"># 用户的名字username = re.compile(r'<img title="(.*?)" alt=', re.DOTALL).findall(data)# print('username', username)
前面注释里内容是利用Google或者fiddle或者查看保存下来的html数据里包含用户名的一段字符串,利用正则:
re.compile(r'<img title="(.*?)" alt=', re.DOTALL).findall(data)
就可以得到username
同理,获取所有你想要的信息,处理之后就可以格式化输出到文件:
mink = min(int(len(userid)), int(len(rate_total)), int(len(rate_room))) # print('mink: ', mink) # 打开输出文件,追加信息进去 fileOp = open(fileOut, 'a', encoding="utf-8") for k in range(0, mink): fileOp.write('%12s\t%12s\t%20s\t%15s\t%15s\t%15s\t%15s\t\n' % (hotelid, userid[k], username[k], rate_room[k], rate_service[k], rate_total[k], rate_time[k])) fileOp.close()
在编写代码的过程中不要忘记使用try...except抛出异常,例如下面:
except: file_except = open('D:/exception.txt','a') file_except.write(tempurl+'\n') breaknumber = breaknumber+1我们也可以顺便把异常处的信息保存下来,方便进行调试
这是运行过程:
(感觉自己在写课程报告。。。习惯性贴过程。。。)
这是最后抓取到的数据样子:
(有几位歪了不知道啥情况,请忽略)
这样,我们就很easy的完成了想要达成的目标(欢迎留言讨论)
- Python3爬虫实战:爬取大众点评网某地区所有酒店相关信息
- Python3爬虫:爬取大众点评网北京所有酒店评分信息
- Python3 实现大众点评网酒店信息和酒店评论的网页爬取
- python爬虫 爬取大众点评中所有行政区内的商户 将获取信息存于excle中
- python 爬虫 爬取大众点评11月之星
- Scrapy爬取大众点评
- 大众点评API获取某坐标周边酒店信息
- python2.7爬虫实例详细介绍之爬取大众点评的数据
- 创建爬虫----爬取大众点评数据并存入mongoDB数据库
- 使用Scrapy爬取大众点评图片
- 爬取大众点评南京美食
- 爬虫实战一:爬取当当网所有 Python 书籍
- 简单Python3爬虫程序(5)进阶:知乎网的登录与用户相关信息爬取
- 五.BeautifulSoup大众点评爬取店铺信息,存储到mongodb
- Python3[爬虫实战] 爬虫之scrapy爬取爱上程序网存MongoDB(android模块)
- jsoup实战之抓取大众点评网区域省份城市信息
- scrapy爬取酒店信息
- python3爬虫-爬取新浪新闻首页所有新闻标题
- hihoCoder 1037 数字三角形
- [C语言][LeetCode][237]Delete Node in a Linked List
- 黑马程序员 —— 标识符的概念及其命名规则
- NSURLSessionConfiguration之异步请求
- Golang实现ping
- Python3爬虫实战:爬取大众点评网某地区所有酒店相关信息
- js--编写可维护的JavaScript-1.编程风格
- sublime 安装Python
- 武器类
- va_list va_start va_end的使用
- HTML5_Web存储
- IOS中Xcode framework无法识别headers目录问题
- 创建SpringMvc框架的web项目
- 最近在学写asp网站,记录一下设置页面固定高度