环境python2
模块requests、urllib、BeautifulSoup、time、json
我爬取的图片是妹子图
网址:http://tu.duowan.com/m/meinv
1.首先是进行网页分析
通过f12对网页进行分析,可以找到套图的网址,点击进入之后,查看网页源代码,没有图片的url。那么他们一定是藏在摸个地方了。我找到了一个网址:=1510133209395”>http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135626&=1510133209395
点进取之后发现这是一个json文件,里面有unicode编码,还有很多的以.jpg结尾的网址,点进网址发现那个就是我想要找到的图片。
目标:获取json
2.我有点击了其他的几个套图,发现规律
=1510133414653”>http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135610&=1510133414653
=1510133209395”>http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135626&=1510133209395
这个网址我不知到怎样才能获取,但是通过观察,我发现前面有很多一样的部分,除了gid和后面的参数不同,gid就是套图的其实网址后面的数字,后面的是一个时间戳,至于怎么发现的,我是从别的地方听来的。
3.用requests模块对这个json网址发出请求,得到json的文本,处理json中的字符串,提取我所需要的部分。
for i in range(0,len(hjson['picInfo'])):
img_name = hjson['picInfo'][i]['title'] #img的标题
img_url = hjson['picInfo'][i]['url'] #img的url
4.获取文件后缀
因为很多文件并不是.jpg格式的,所以我要获取文件后缀
pix = img_url.split('/')[-1].split('.')[-1] #获取后缀
5.创建文件保存路径
这里用到os模块
先创建套图文件夹
gallery_name = hjson['gallery_title'] #套图文件夹
print gallery_name #打印
os.mkdir(gallery_name) #创建套图文件夹
完整代码
import urllib
import requests
from bs4 import BeautifulSoup
import time
import json
user_agent = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:56.0) Gecko/20100101 Firefox/56.0'
headers = {'User-Agent':user_agent}
def get_html(url):
#url = 'http://tu.duowan.com/m/meinv'
data = requests.get(url,headers = headers)
data.encoding = 'utf-8'
soup = BeautifulSoup(data.text,'html.parser')
href_list = []
for duo in soup.find_all(class_="tags-content"):
for em in soup.find_all('em'):
if em.a != None:
href_list.append(em.a.get('href'))
return get_gid(href_list)
def get_gid(href_list):
gid_list = []
for href in href_list:
#print href
pat = re.compile(r'\d+')
gid = re.search(pat,href)
#print gid.group()
gid_list.append(gid.group())
#print gid_list
return get_jso(gid_list)
def get_jso(gid_list):
#http://tu.duowan.com/index.php?r=show/getByGallery/&gid=135823&_=1510117947713
# 1510118493946
jso_url_list = []
for gid in gid_list:
jso_url = 'http://tu.duowan.com/index.php?r=show/getByGallery/&gid=%s&_=%s'%(gid,int(time.time()*1000))
jso_url_list.append(jso_url)
return get_jso_data(jso_url_list)
def get_jso_data(jso_url_list):
datas_list = []
for jso_url in jso_url_list:
datas = requests.get(jso_url,headers=headers)
datas.encoding = 'utf-8'
#print datas.text
datas_list.append(datas.text)
#print datas_list
return get_img_url(datas_list)
def get_img_url(datas_list):
for data in datas_list:
hjson = json.loads(data)
gallery_name = hjson['gallery_title']
print gallery_name
os.mkdir(gallery_name)
for i in range(0,len(hjson['picInfo'])):
img_name = hjson['picInfo'][i]['title']
img_url = hjson['picInfo'][i]['url']
pix = img_url.split('/')[-1].split('.')[-1]
img_path = '%s.%s'%(img_name,pix)
local = os.path.join(gallery_name,img_path)
urllib.urlretrieve(img_url,local)
print img_path
first_url = 'http://tu.duowan.com/m/meinv'
get_html(first_url)