本来觉得没什么可写的, 因为网上这玩意一搜一大把, 不过爬虫毕竟是 python 的一个大亮点, 不说说感觉对不起这玩意
基础点来说, python2 写爬虫重点需要两个模块, urllib 和 urllib2, 其实还有 re
先介绍下模块的一些常用功能
- urllib.urlopen(http://xxx.xxx.xxx) #打开一个网址, 只是打开, 和 open 差不多
- urllib2.Request(url) #解析网址, 这个可以省略, 具体不是很懂, 一些功能, 比如加 head 头什么的也需要使用这个
- urllib.urlretrieve(url,filename) #下载用, 把 url 提供的东西 down 下来, 并用 filename 保存
举个蜂鸟爬图片的例子, 下面上伪代码:
url 解析
打开 url
读取 url, 就是 read()
使用 re.findall 找到所有和图片有关系的地址, 这里只 jpg
循环下载
看图上, 图片链接格式是 src="http://index_url/page_num/image_name.jpg?XXXXXXX", 那么如果需要下载的话一定是需要红圈部分, 也就是 http://index_url/page_num/image_name.jpg
分析之后后面的事就好办了, 下面上代码
- import urllib
- import urllib2
- import re
- # 处理地址, 并获取页面全部的图片地址
- def get_image_url(url):
- #url_format = urllib2.Request(url) #1
- url_open = urllib.urlopen(url) #2
- url_read = url_open.read() #3
- re_value = re.compile((?<=src\=\").*?\.jpg)
- image_url_list = re.findall(re_value,url_read) #4
- return image_url_list
- # 这个函数专门用来下载, 前面两行是将图片连接中 / 前面的内容全部删除, 留下后面的文件名用来保存文件的, try 不说了, 不清楚请翻回去看容错
- def down_image(image_url):
- rev = ^.*/
- file_name = re.sub(rev,,image_url)
- try:
- urllib.urlretrieve(image_url,file_name)
- except:
- print download %s fail %image_url
- else:
- print download %s successed %image_url
- if __name__ == __main__:
- url = http://bbs.fengniao.com/forum/10384633.html
- image_url_list = get_image_url(url)
- for image_url in image_url_list:
- down_image(image_url) #5
困死, 睡觉去有时间再说说翻页什么的, 就能爬网站了
来源: http://www.bubuko.com/infodetail-2504949.html