爬虫在大数据时代占据了重要的位置,在网上有大量的公开数据可以轻松获取。

爬虫入门其实非常简单,就算你是编程小白,也可以轻松爬下一些网站。下面就以爬取笔者的个人博客网站(大数据分析@唐松)为例,教大家学会一个简单的爬虫。。一方面,由于这个网站的设计和框架不会更改,因此本书的网络爬虫代码可以一直使用; 另一方面,由于这个网站由笔者拥有,因此避免了一些法律上的风险。

如果你有已经安装了python3,pip,可以跳过下面对python,pip安装的介绍。

1. 安装python3, pip, beautifulsoup

第一步:Python3安装,请自行百度 Anaconda。这里推荐使用 Anaconda 的 Python 科学计算环境。只需像普通软件一样安装好 Anaconda,就可以把 Python 的环境变量、解释器、开发环境等安装在计算机中。

第二步:安装pip,pip是按照python各种包的工具,有了它安装python的各种包都很方便。可以借鉴这篇文章:http://www.tuicool.com/articles/eiM3Er3/

第三步:有了pip,就可以安装beautifulsoup了。这个包可以很好地从网页代码中提取想要的数据。安装方法: 在 terminal (MacOS) 或是 cmd (Windows)中键入

pip install bs4

第四步:选一个python编译器来跑程序。为了代码的调试方便,可以直接用 Anaconda 中的 jupyter。使用方法:在 terminal (MacOS) 或是 cmd (Windows)中键入

jupyter notebook

2. 第一步:获取整个页面

#!/usr/bin/python
# coding: utf-8
import requests
link = "http://www.santostang.com/"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
print (r.text)
上述代码获取了博客首页的网页HTML代码。首先import requests,使用requests.get(link, headers=headers)获取了网页。值得注意的是:
1. 用requests的headers可以伪装成浏览器访问
2. r是requests的Response回复对象,我们从中可以获取我们想要的信息。r.text是获取的网页内容代码。
运行完上述代码后,我们得到的结果是:
3. 第二步:提取需要的数据
#!/usr/bin/python
# coding: utf-8
#!/usr/bin/python
# coding: utf-8
import requests
from bs4 import BeautifulSoup #从bs4这个库中导入BeautifulSoup
link = "http://www.santostang.com/"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
r = requests.get(link, headers= headers)
soup = BeautifulSoup(r.text, "lxml") #使用BeautifulSoup解析这段代码
title = soup.find("h1", class_="post-title").a.text.strip()
print (title)
用beautifulsoup对爬下来的页面进行解析,接下来就是用soup的语法,得到搜索结果第一间shop的名称,并打印出来。关于beautifulsoup的语法,可以查看:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
因为中文解码的问题,要打印出中文,所以在code的最开始加上了
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
那么怎么找到这个店名在HTML里的哪里呢?这里用到了Chrome中“审查元素功能”

打开之后,点击想要的数据,下面的Elements就会出现相应的code所在的地方。
4. 保存数据到本地文件
#!/usr/bin/python
# coding: utf-8
import urllib2
from bs4 import BeautifulSoup
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
link = "http://www.dianping.com/search/keyword/7/0_%E6%BD%AE%E6%B1%95%E7%89%9B%E8%82%89"
headers = {'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
request = urllib2.Request(link,headers=headers)
response = urllib2.urlopen(request)
page = response.read()
soup = BeautifulSoup(page, "lxml")
shop = soup.find("div", class_="tit").a.h4.text.strip()
print shop
with open('C:/Users/administrator/Desktop/shop.txt', "a+") as f:
f.write(shop)
f.close()

在原有的基础上,再三行代码,把这个字符串,保存在text里,并存到本地。

注意把文件地址改成自己电脑的地址。

5. 后记

这只是第一家店,如果要爬下这个页面的所有店铺,加上循环就可以了。