小试Python——爬虫抓取大众点评上的数据
2016-12-11 14:15
459 查看
前言
我开通了一个微信公共号“王和阳的航海日志”,在上面记录着自己的学习、思考、实践和成长的过程,欢迎关注、交流和拍砖。碎碎念:某一天妹子突然说要让我帮她写个爬虫,貌似在她眼里,所有和电脑相关的事儿,程序员都能搞的定…….哈哈,作为一个立志要改变世界的程序员,用Python写爬虫当然是so easy的一件事!废话不多说,直接上正文吧。
1、目标
爬取大众点评上“武汉”这个城市下面所有齿科医院的地址。2、基本思路
首先,你先想想自己作为一个人是如何去完成这件事的呢?括号内为爬虫是如何实现相同效果的。Created with Raphaël 2.1.2打开大众点评首页选择地区为“武汉”在搜索框中输入“齿科”(爬虫访问包含了关键词的URL)复制页面中的各个诊所的名字和地址到记事本中(用正则表达式获取想要的字段,并将其保存成txt文件)收集完毕?大功告成!点击“下一页”(输入页数,用for循环来收集多个页面的信息)yesno
而我们写爬虫其实也是为了让计算机去模拟这个行为。
3、具体操作
这里我们观察一下地址栏的变化。图1是将城市切换到武汉之后的URL,图2是输入搜索词之后的URL,图3是点击“下一页”后的URL。这里讲下什么是URL。
URL是Uniform Resource Locator的缩写,译为“统一资源定位 符”。
通俗地说,URL是Internet上描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。
URL的一般格式为(带方括号[]的为可选项):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL的格式由三部分组成:
①第一部分是协议(或称为服务方式)。
②第二部分是存有该资源的主机IP地址(有时也包括端口号)。
③第三部分是主机资源的具体地址,如目录和文件名等。
第一部分和第二部分用“://”符号隔开,
第二部分和第三部分用“/”符号隔开。
第一部分和第二部分是不可缺少的,第三部分有时可以省略。
知道了这个,让我们重点关注下图2,图2中的方框1(“/search/keyword”)代表的是搜索关键词的路径,方框2(“16”)代表的是武汉这个城市的编号,方框3和方框4表示的是搜索词!
而图3中的内容我们该如何理解呢?经过我的几次实验后,发现“p2”代表的是“page 2”,也就是“第二页”的意思,最后的“?aid=……..”属于 query string,可以忽略,一般是用来标记网页自身的一些信息,所以我们只要改变“p”后面所带的数字,就能实现翻页的效果了!
所以我们就知道了,如果你想搜索任意的一个词,那么在地址栏中按照如下的格式输入即可。
协议(http://) + 域名(www.dianping.com)+ 路径(/search/keyword) + 前缀(/0_) + 关键词(齿科) + 页数 (/p) + 具体页数
4、实际代码
这里因为是要教妹子的,所以加了比较多的注释。#! python3 # coding:utf-8 import urllib2 import urllib import re import os import shutil # 高效处理文件的模块 #sys为system的缩写,引入此模块是为了改变默认编码 import sys reload(sys) sys.setdefaultencoding('utf8') #设置系统的编码为utf8,便于输入中文 host = 'http://www.dianping.com' #自定义UA头部,直接用即可,不用理解细节 user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.89 Safari/537.36' headers = {'User-Agent':user_agent} key_word = '齿科' #写好要搜索的关键词 city_num = str(16) #武汉的城市编码为16,其他城市的编码可以在点评网的URL中找到 directory = city_num + '\\' + unicode(key_word,'utf8') #Windows系统下,创建中文目录名前需要制定编码,这里统一用UTF-8 if os.path.exists(directory): shutil.rmtree(directory) os.makedirs(directory) #删除后再创建对应的关键词目录 print ('delete existed directory successfully') else: os.makedirs(directory) print ('create directory successfully') url = host + '/search/keyword/' + city_num def getDocument(page): page = str(page) path_name = directory + '\\page_' + page + '.txt' file = open(path_name, 'w+'); #创建文件 #由于要搜索的关键词是中文,所以需要进行转码,这里调用了urllib.pathname2url函数 real_url = url + '/' + '0_' + urllib.pathname2url(key_word) + '/p' + page request = urllib2.Request(real_url, headers = headers) #发送网络请求 response = urllib2.urlopen(request) #得到网络响应 document = response.read().encode('utf-8') #将网页源码用UTF-8解码 items_name = re.findall(r'data-hippo-type="shop"\stitle="([^"]+)"', document, re.S) #正则匹配出商家名 items_address = re.findall(r'<span\sclass="addr">([^\s]+)</span>', document, re.S) #正则匹配出地址 result = '' for index in range(len(items_name)): result += items_name[index] + ' ' + items_address[index] + '\n' file.write(result) #将结果存入文件 file.close() print ('Complete!') def start_crawl(): for index in range(0, 5): getDocument(index) start_crawl() #开始爬数据!
相关文章推荐
- python 爬虫 实战(一) —— 抓取学校开课数据
- 07-爬虫的多线程调度 | 01.数据抓取 | Python
- python爬虫"Hello World"级入门实例(二),使用json从中国天气网抓取数据
- [Python爬虫] 之十四:Selenium +phantomjs抓取媒介360数据
- python写爬虫2-数据抓取的三种方式
- Python爬虫框架Scrapy实战之抓取户外数据
- Python爬虫处理抓取数据中文乱码问题
- 抓取安居客二手房经纪人数据,python爬虫自动翻页
- python爬虫---post抓取查询数据简单说明
- [置顶] [爬虫]使用python抓取京东全站数据(商品,店铺,分类,评论)
- [python和大数据-1]利用爬虫登录知乎进行BFS搜索抓取用户信息本地mysql分析【PART1】
- Python爬虫抓取动态数据
- Python爬虫抓取手机APP的传输数据
- Python爬虫:抓取手机APP数据
- Python 网络爬虫5 ---- 第一次实现抓取数据并且存放到mysql数据库中
- Python爬虫:抓取手机APP的数据
- Python爬虫:抓取手机APP的传输数据
- 直播网站LiveTV Mining,爬虫抓取数据 python3+selenium+phantomjs
- Python开源爬虫项目代码:抓取淘宝、京东、QQ、知网数据--转
- python淘宝爬虫基于requests抓取淘宝商品数据