环境python2.7
模块 requests、 urllib 、BeautifulSoup
首先,进行网页分析
网址:http://www.xiaohuar.com/hua/
1.查看网页源代码
通过查看源代码,发现图片的url在网页源代码中,所以可以直接获取,但是直接访问还不行,需要自己在前面加一点东西
2.构造网页链接
通过观察可以发现
http://www.xiaohuar.com/list-1-2.html
http://www.xiaohuar.com/list-1-3.html
所有网页都很类似,可以直接构造出不同页面的url
url_list = []
i = 0
for i in range(0,17):
url = 'http://www.xiaohuar.com/list-1-'+str(i)+'.html'
url_list.append(url)
3.获取图片的真正的url
在图片所在的页面,我看见图片href=”/d/file/20161117/a293f78e3738acfd03fd05c2694f1c7b.jpg”
直接访问发现无法打开该图,真正的href=’http://www.xiaohuar.com/d/file/20161117/a293f78e3738acfd03fd05c2694f1c7b.jpg‘类似于这种格式,所以我前面url进行补全
rurl = 'http://www.xiaohuar.com'+url_s
这里的url_s就是我在网页中提取到的href,代码是进行字符串拼接。
4.网页分析结束
用BeautifulSoup对网页进行解析,获取href
soup = BeautifulSoup(r.text,'html.parser')
for hua in soup.find_all(class_="img"):
for a in hua.find_all('a'):
if a.img != None:
urllist.append(a.img.get('src'))
for url_s in urllist:
rurl = 'http://www.xiaohuar.com'+url_s
rurl_list.append(rurl)
这里我在前面定义了一个rurl_list列表,将拼造好的url保存到列表中
完整代码
#coding:utf-8
import urllib
import requests
from bs4 import BeautifulSoup
def xiao():
url_list = url_list_get() #调用函数
#添加头信息
user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0'
headers = {'User-Agent':user_agent}
#创建src列表
urllist = []
#创建图片url列表
rurl_list = []
#遍历所有的页面
for url in url_list:
#进行request请求
r = requests.get(url,headers=headers)
#对r进行解码
r.encoding = 'gb2312'
#将请求到的网页进行解析
soup = BeautifulSoup(r.text,'html.parser')
#提取所有img标签
for hua in soup.find_all(class_="img"):
#提取img标签中的a标签
for a in hua.find_all('a'):
#a标签中有的没有src标签,进行去除
if a.img != None:
#将获取的src保存到列表中
urllist.append(a.img.get('src'))
#构造真正的图片url
for url_s in urllist:
rurl = 'http://www.xiaohuar.com'+url_s
#将真正的url保存到列表中
rurl_list.append(rurl)
return download(rurl_list)
def download(rurl_list): #下载函数
i = 0
#将图片下载
for rurl_r in rurl_list:
print rurl_r
urllib.urlretrieve(rurl_r,'img'+str(i)+'.jpg')
i += 1
def url_list_get():
url_list = []
i = 0
#构造1-16页的网址
for i in range(0,17):
url = 'http://www.xiaohuar.com/list-1-'+str(i)+'.html'
url_list.append(url)
return url_list
xiao()
遇到的问题:
1.编译器老是莫名奇妙的报错,我也不知到为什么会是这个样子
2.函数的调用很糊涂,很笨拙
3.给变量起名字的时候很纠结,不知道起什么样的名字好些,写完之后发现每个都差不多
4.需要多加练习