用到的库:urllib。在Python3.x中 urlretrieve函数也在urllib.request下,因此只需要导入request即可。
from urllib import request
基本的思路是: 【用request.urlopen()打开网页】 -> 【url.read().decode() 得到网页源码】 -> 【re模块正则表达式得到gif文件的url】 -> 【request.retrieve()爬取数据】
for i in range(1,5): # 由于这个网页只有5页 url_0 = 'http://www.joke98.com/xieedongtaitu/list_6025_'+str(i)+'.html' response = request.urlopen(url_0) # 打开url,注意这个时候的结果应该是2/8/16进制 html = response.read().decode('utf-8') # 用utf-8编译
pattern = '/xieedongtaitu/\d{6}.html' # 根据html的结果里,手动找到html,写正则表达式 Article_list += re.findall(pattern,html) # 找到所有子链接
for article in Article_list: article = 'http://www.joke98.com'+article # 注意到子连接并不完整,所以加上前面的部分 Article_list2.append(article) # 重新建立一个list,存放所有子连接
file_w = open('html.txt','a') for i in Article_list2: file_w.write(i+',') # 由于我并不会爬虫,所以还是建一个txt保存一下,不然一直重复读html很费时 file_w.close()
重复一下上述过程,得到gif文件的链接,然后
def get_gif_file(): add = open('gif_html.txt','r').read().split('\n') for i in add: request.urlretrieve(i ,i[-17:]) # 爬取文件
总结:第一次做,结果并不好,爬取的文件有重复,而且不全,原因是每一个子链接其实有很多分页,没有处理这个问题。以后再改吧╮(╯▽╰)╭。
完整代码:
from urllib import request import ssl import re def get_Article(): ssl._create_default_https_context = ssl._create_unverified_context Article_list = [] Article_list2 = [] for i in range(1,5): url_0 = 'http://www.joke98.com/xieedongtaitu/list_6025_'+str(i)+'.html' response = request.urlopen(url_0) html = response.read().decode('utf-8') pattern = '/xieedongtaitu/\d{6}.html' Article_list += re.findall(pattern,html) for article in Article_list: article = 'http://www.joke98.com'+article Article_list2.append(article) for i in Article_list2: print(i) print(Article_list2) file_w = open('html.txt','a') for i in Article_list2: file_w.write(i+',') file_w.close() def get_gif(): with open('html.txt','r') as k: Articles = k.read() Articles_list = Articles.split(',') gif_list=[] for i in Articles_list[:-1]: response = request.urlopen(i) # urlopen(?) html_gif = response.read().decode('utf-8') pattern_gif = '/uploads/allimg/.{20}.gif' gif = re.findall(pattern_gif,html_gif) if len(gif)>0 : gif_new = 'http://www.joke98.com' + gif[0].replace('" /></div>','') gif_list.append(gif_new) print(len(gif_list)) def get_gif_file(): add = open('gif_html.txt','r').read().split('\n') for i in add: request.urlretrieve(i ,i[-17:]) get_gif_file()写的真糙啊。。。。。_(:з」∠)_