爬虫技术随着网络的普及和广泛应用,也得到了极大的发展,互联网上有着无数的网页,如何从海量页面中快速的获取信息,是需要思考和解决的问题,这也促使了网络爬虫技术的发展,从一个页面到另一个页面,从一个站点到另一个站点,就像蜘蛛织网一样,因此网络爬虫也形象的称之为网络蜘蛛,也叫网络机器人。
理论上讲,任何支持网络通讯的语言都可以用来做爬虫,写爬虫与编程语言的关联性不大,但总有相对顺手,便捷的语言,Python无疑是其中的一种,其广泛地应用于爬虫编写,也诞生了很多优秀的爬虫框架,如Scrapy, PySpider, Crawley, Portia, Beautiful Soup, Grab等等,熟练地使用这些框架可以帮助人们快速的开发爬虫应用,有关这些框架的使用和技术介绍,网上有大量的文献,在这里不作讨论。今天我要给大家介绍的是通过另一种方式快速简便的实现爬虫应用 - 正则表达式。这种方式在应对静态HTML页面时特别有效,下面通过一个实例来简单介绍下,希望能起到举一反三的作用。
正则表达式在python爬虫中的应用
url = "https://image.baidu.com/search/index?tn=baiduimage&ct=201326592&lm=-1&cl=2&ie=gb18030&word=%C3%C0%C9%D9%B8%BE&fr=ala&ala=1&alatpl=cover&pos=0&hs=2&xthttps=111111"
# url = "http://www.360doc.com/content/17/0203/19/12472239_626276344.shtml"
# url = "http://www.360doc.com/userhome/12472239"
# url = "http://www.360doc.com/content/18/0708/00/12472239_768657823.shtml"
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
# driver = webdriver.Ie()
# driver.get("www.baidu.com")
# driver.find_element_by_id("kw").send_keys(u"美少妇")
# driver.find_element_by_id("su").send_keys(Keys.ENTER)
import urllib, requests
# getURL = urllib.urlopen(url)
# html = getURL.read() # 有时现实的html中文是乱码,下面的写法能正确显示html文档
req = requests.get(url)
# html = req.text
html = req.content
# print html
import re
# reg = r'data-imgurl="(.+?\.jpg)" />'
# reg = r'src="(.+?\.jpg)" pic_ext'
reg = r'src="(.+?\.jpg)"\s/>'
pattern = re.compile(reg)
imglist = re.findall(pattern, html)
print "how many pictures found - ", len(imglist)
x = 1
savePictureFolder = "C:\Users\Luck_Lello\Desktop\SavePythonSpiderPictures"
for i in imglist:
print i
urllib.urlretrieve(i, savePictureFolder + "\\%s.jpg"%(x))
x += 1
以上内容是根据html内容来抓取图片的,对于一些静态页面html比较有效,对shtml没多大用处。但此时也可以先模拟js行为,然后在抓取页面内容进行类似处理。
这个例子告诉我们,做事情有时不能太拘泥于形式和框架,经验固然重要,但还是要具体问题具体分析,解决问题最有效的方式有时就是最不麻烦的方式,测试尤其如此。