现在利用业余时间做个小的训练模型,需要用到大量的图片数据。第一时间想到的是使用搜索引擎来爬取数据。于是需要做一个爬虫。
网上找爬虫,第一个推荐的就是BeautifulSoup。于是找了一本BeautifulSoup的书来指导操作。看完书以后便有了如下的代码。
import urllib2 import json from bs4 import BeautifulSoup class ImgCrawler: def __init__(self,html = None, queryword = None): #网址 self.html = html #搜索关键词 self.query = queryword #伪装浏览器头 self.header = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.134 Safari/537.36"} #获取请求 def genRequest(self): return urllib2.Request(self.html+self.query,headers = self.header) #获取url供beautifulsoup使用 def getUrl(self,request = None): return urllib2.urlopen(request) #获取html结构 def getSoup(self,url = None, parser = None): return BeautifulSoup(url, parser) #获取真实的img链接 def getActualUrl(self, soup= None,flag=None, classflag=None, jsonflaglink=None, jsonflagtype=None ): actualurl = [] for a in soup.find_all(flag, {"class" : classflag}): link = json.loads(a.text)[jsonflaglink] filetype = json.loads(a.text)[jsonflagtype] detailurl = link + u'.' + filetype actualurl.append(detailurl) return actualurl if __name__ == '__main__': search_url = "https://www.google.com.hk/search?safe=strict&hl=zh-CN&site=imghp&tbm=isch&source=hp&biw=&bih=&btnG=Google+%E6%90%9C%E7%B4%A2&q=" #从google搜索时提取出来的链接,不同google站点不同 queryword = raw_input(u'搜索关键词=')#输入关键词 #调用类 img = ImgCrawler(search_url, queryword) #生成使用请求 request = img.genRequest() #获取url,注意失败应有提示 try : url = img.getUrl(request) except: print u'无法链接到google' #获取html结构 html.parser是beautiful的一种结构的关键词 soup = img.getSoup(url, 'html.parser') #网页代码分析,google图片搜索在网页的div下class属性为rg_meta的js脚本里,以ou开头的后面是链接,以ity开头的后面是文件类型 #获取本页图片网页链接 actualurllist = img.getActualUrl(soup,'div','rg_meta','ou','ity') print len(actualurllist)
但是当查看len(actualurllist)的时候发现,长度始终只有100。查看google网页,发现现在的网页都是滚动刷新的,而且使用BeautifulSoup也只能处理超链接,对按钮也无能为力。在stackoverflow上查询,也是这个结论。因此终极方法是使用python + PhatomJS + Selenium来解决问题。因此装PhatomJS+Selenium。至于运行速度,资源消耗暂时不管了吧。
先在 http://phantomjs.org/download.html 下载了操作系统对应的版本。解压开,只有一个exe文件。于是在环境变量里添加了这个叫做phantomjs.exe的文件。phantomjs的文档地址http://phantomjs.org/quick-start.html
然后在 https://pypi.python.org/packages/51/8b/21edaaee627c8e1c37b6c281eff2240b1eba0cf472c08c03b1920c1227a4/selenium-3.4.3-py2.py3-none-any.whl#md5=dd4e23aae252aca03f23e0ad67bb2e2b 下载whl版本的安装文件
进入下载路径,使用python -3 -m pip install selenium-3.4.3-py2.py3-none-any.whl进行安装。这里我的工作环境是Win10,python2.7,已装了anaconda2(64bit),使用pycharm。
装的时候提示说pip version是8.1.2, 需要9.0.1 于是按照提示,使用python -m pip install --upgrade pip进行升级,然后才装上selenium