Python 简单爬虫(mm图)
参照cuiqingcai大佬的教程把代码改了下,记录一下待以后回头看看当初开始学爬的样子。
代码不健壮/完善,遇到的问题先记下,逐个再深入学习理解。
真的是头铁。获取的图片地址都是列表,没法保存,搜了一圈没找到方法,又不肯重新看教程,耗了大半天时间。这下好了,先曲线解决心态不炸了才能继续看教程。MMP,看以后还半罐水不。2018/09/06 21:56
1.抓取页面乱码
Pycharm编译返回的数据乱码,之前断断续续学习的搜过相关但没解决,这次处理了。方法应该不是太好,以后还要仔细看看编码方面的帖子。
2.正则匹配
还需多练加强,总感觉通配用得多或者写的不够具体会影响匹配效率。
3.内容页面采集
目前只采集了列表页,图片使用相对路径,要构造完整URL。暂时用的re.sub。刚开始写总觉得有点绕,先获取列表再列表中获取内容URL。。。
得注意的地方:
sub_html = re.sub('/allimg/', 'http://www.94xmn.com/uploads/allimg/', html) #匹配不全 sub_html = re.sub('allimg/', 'http://www.94xmn.com/uploads/allimg/', html) #匹配正常
4.保存文件夹
只保存了标题,但没格式化,文本显示内容不清晰。#每组图分别建立文件夹,以URL末尾数字命名。
5.多线程,快。
直接抄的大佬代码,想体验一下区别。后续深入,虽然采的页面不多,速度啊,嗖的一下。
6.剩余问题
1>.分页内容采集;2>.代码结构不清晰(各函数功能)
7.生成器(基础语法的教程没讲解,后续看高级点的。)
渣渣代码
import requests import re import os header = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36' + '(KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36' } # 获取列表页 def get_list_link(url): r = requests.get(url, headers=header) html = r.text regex = re.compile(r'class="wf-cld".*?<a\shref="(.*?)"\stitle', re.S) rlinks = re.findall(regex, html) # print(rlink) return rlinks # 获取内容页及分页 def get_pic_link(rlinks): for link in rlinks: r = requests.get(link, headers=header) print(link) print(link[-9:-5]) r.encoding = 'utf-8' html = r.text sub = re.sub('/uploads/allimg/', 'http://94xmn.com/uploads/allimg/', html) # print(sub) regex = re.compile('<div class="bbox">.*?<img src=\'(.*?)\'\salt=', re.S) plink = re.findall(regex, sub) # print(plink) # 每组图建立个文件夹 os.makedirs(os.path.join("G:\\studios\\python\\mmpic", link[-9:-5])) ##创建一个存放套图的文件夹 os.chdir('G:\\studios\\python\\mmpic\\' + link[-9:-5]) # 获取图片url pic = requests.get(plink[0]) with open(link[-9:-5] + '.jpg', 'wb') as f: f.write(pic.content) f.close() print('下载完毕') # 主函数 def main(): os.chdir('G:\\studios\\python\\mmpic') url = 'http://www.94xmn.com/siwameitui/list_3_2.html' rlinks = get_list_link(url) print(get_pic_link(rlinks)) if __name__ == '__main__': main()
最后是今天感受:程序这东西真神奇。