python url解析path_我用python爬取了整个斗图网站,不服来斗

QQ、微信斗图总是斗不过,索性直接来爬斗图网,我有整个网站的图,不服来斗。

废话不多说,选取的网站为斗图啦,我们先简单来看一下网站的结构

网页信息

969d4c8c196e6b5eecb2f7ea22b4761e.png

注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此我建了个python学习资源群里面有最新学习资料,如果你想学python,可以关注我,后台私信我 ‘py’ 自动获取最新python教程资料!还有老司机解答哦!
从上面这张图我们可以看出,一页有多套图,这个时候我们就要想怎么把每一套图分开存放(后边具体解释)

通过分析,所有信息在页面中都可以拿到,我们就不考虑异步加载,那么要考虑的就是分页问题了,通过点击不同的页面,很容易看清楚分页规则

75f22b9581e0314ef73238f451dd6552.png

很容易明白分页URL的构造,图片链接都在源码中,就不做具体说明了明白了这个之后就可以去写代码抓图片了

存图片的思路

因为要把每一套图存入一个文件夹中(os模块),文件夹的命名我就以每一套图的URL的最后的几位数字命名,然后文件从文件路径分隔出最后一个字段命名,具体看下边的截图。

bdc7cc68225734bcd6ffb3920b5d98df.png

这些搞明白之后,接下来就是代码了(可以参考我的解析思路,只获取了30页作为测试)全部源码

# -*- coding:utf-8 -*-import requestsfrom bs4 import BeautifulSoupimport osclass doutuSpider(object):    headers = {        "user-agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"}    def get_url(self,url):        data = requests.get(url, headers=self.headers)        soup = BeautifulSoup(data.content,'lxml')        totals = soup.findAll("a", {"class": "list-group-item"})        for one in totals:            sub_url = one.get('href')            global path            path = 'J:rainimage'+''+sub_url.split('/')[-1]            os.mkdir(path)            try:                self.get_img_url(sub_url)            except:                pass    def get_img_url(self,url):        data = requests.get(url,headers = self.headers)        soup = BeautifulSoup(data.content, 'lxml')        totals = soup.find_all('div',{'class':'artile_des'})        for one in totals:            img = one.find('img')            try:                sub_url = img.get('src')            except:                pass            finally:                urls = 'http:' + sub_url            try:                self.get_img(urls)            except:                pass    def get_img(self,url):        filename = url.split('/')[-1]        global path        img_path = path+''+filename        img = requests.get(url,headers=self.headers)        try:            with open(img_path,'wb') as f:                f.write(img.content)        except:            pass    def create(self):        for count in range(1, 31):            url = 'https://www.doutula.com/article/list/?page={}'.format(count)            print '开始下载第{}页'.format(count)            self.get_url(url)if __name__ == '__main__':    doutu = doutuSpider()    doutu.create()复制代码

结果

d3f86bfd759fe4dc6804e0d2c00132da.png
31341cab51ba83a2c01b1d99cda583c7.png
ea1ac42f4c4ba42d1da88473c0ce8186.png

总结

很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此我建了个python学习资源群里面有最新学习资料,如果你想学python,可以关注我,后台私信我 ‘py’ 自动获取最新python教程资料!还有老司机解答哦!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值