一个简单的Python爬虫程序


利用Python自带的urllib模块,对我自己博客的一篇文章Pycon2014 @Shanghai进行爬取,得到blog_spider文件和博客中的插图,并将插图按顺序重命名。爬取到的内容如下,一个html文件和五幅图片。

源码如下,首先是读取并保存html文件,通过urllib.urlopen连接到页面,read()方法读取页面,保存html文件,然后提取出html中的图片链接,利用正则表达式和re模块中的re.findall()提取出图片链接默认保存为list, 最后,通过rl.retrieve()方法将图片直接下载,重命名。

import urllib
import re
import os

os.path.join(r'E:\learn-python', r'blog_spider')
os.mkdir(r'E:\learn-python\blog_spider')

def gethtml(url):
    page = urllib.urlopen(url)
    html = page.read()
    return html

def getimg(html):
    img_re = re.compile(r'src="(.+?\.jpg)"')
    imglist = re.findall(img_re,html)
    return imglist

blog_html = gethtml('http://canonxu.com/2014/11/Pycon2014@Shanghai/')
with open(r'E:\learn-python\blog_spider\blog_html.html', 'w') as f:
   f.write(blog_html)

blog_imglist = getimg(blog_html)
x = 0
for imgurl in blog_imglist:
    urllib.urlretrieve(imgurl,r'E:\learn-python\blog_spider\%s.jpg' % x)
    x+=1

这几乎是最简单的爬虫,我尝试利用这种最简单的机制对新浪微博等进行爬取,均告失败,说明还是有很多的内容等着我去学习的。 要实现更为复杂的爬虫,难点之一在于正则表达式,一般拿到正确的正则表达式就可以进行无障碍爬取,正则表达式是网络编程的重点和难点,值得花大功夫学习。难点之二在于一些常用高效的爬虫模块的学习,如urllib,urllib2,scrapy等,需要花时间看。然而,最大的难点在于许多网站有反爬虫机制,破解也需要具体问题具体分析,怎么做http伪装,分布式,ip池等都有很多的学问,多动脑筋才行。

学习爬虫是一件很有趣的事情 :)


canonxu - 上海交通大学-电子工程系-硕士研究生 编程菜鸟。
Published under (CC) BY-NC-SA in categories Practise  tagged with spider, python