使用Python实现简单的网页图片爬取
使用的模块
import requests #requests模块是第三方模块,需要自己另行安装,功能非常强大,使用Requests 发送网络请求非常方便
requests 安装
在终端运行如下代码即可
pip install requests
requests简单的使用
在这里不深入讲述requests的使用,只是将本项目中用到的简单讲一下,但是requests的强大之处远不止这些。
import requests #导入requests模块
r=requests.get(url) #获取网页,url为目标网页链接
#这里得到了一个名为r的response对象,可以对它进行进一步的操作
r.text
r.encoding
r.content
re模块 正则表达式
正则表达式是网络爬取非常重要以及有效的工具
有了以上两个模块,爬取图片将非常有效
爬取实例
以天堂图片网为例,爬取该网页上燕窝的图片
直接上代码
如下
#!/usr/bin/python
#coding:utf-8
import urllib2 #也可以用urllib2.urlopen
import sys
import re
import requests
#获取网页源代码
def get_httpdoc(url):
r=requests.get(url)
http_doc=r.text
return http_doc
#解析源代码,获取链接中高清图片链接
def jiexi_url(http_doc):
tem_img_url=re.findall('/tupian/yanwo_v43788/pic_\d{6}.html',http_doc)
imgurl=[]
for img in tem_img_url:
new_img = 'http://www.ivsky.com'+img #补全图片的链接
imgurl.append(new_img)
img_url=list(set(imgurl))
return img_url
#从高清图片链接中获取图片地址
def get_HDurl(img_url):
HD_url=[]
for l in img_url:
new_ldoc=get_httpdoc(l)
try:
tem_l=re.findall('http://img.ivsky.com/img/tupian/pre/201709/17/yanwo-{0,1}\d{0,3}.jpg',new_ldoc)[0]
except Exception , e:
pass
HD_url.append(tem_l)
return HD_url
#下载高清图片
def download(HDurl):
print HDurl
r=requests.get(HDurl)
fd=r.content
filename = HDurl.rsplit('/',1)[-1]
fd1=open(filename,'w+')
fd1.write(fd)
fd1.close()
url='http://www.ivsky.com/tupian/yanwo_v43788/'
http_doc = get_httpdoc(url) #获取网页源代码
img_url = jiexi_url(http_doc)
print img_url
HD_url = get_HDurl(img_url) #获取高清图片的链接
print HD_url
import threading #引入多进程
threads=[]
for l in HD_url:
t=threading.Thread(target=download,args=(l,))
threads.append(t)
for t in threads:
t.start()
for t in threads:
t.join()
上面还引入的多进程,下载图片的速度快的666