QQ登录

只需要一步,快速开始

 找回密码
 立即注册

QQ登录

只需要一步,快速开始

查看: 5501|回复: 135
打印 上一主题 下一主题

阿奔哥的福利图爬取--python代码分享

[复制链接]

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
跳转到指定楼层
楼主
发表于 2019-3-9 16:33 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

    最近半个月,我开始自学python爬虫。这是我第一个独立完成的脚本,发帖纪念一下。
    首先要向游大声明一下,此贴纯粹为学习交流、经验分享之用,本人绝无恶意爬取蚂蚁论坛,仅出于练手目的爬取阿奔发表的图片,代码里也设置了暂停时间,防止服务器请求过多无法响应。以后再不会爬取蚂蚁论坛来练手(除非游大做了反爬措施,那可能还会再练手一次,不过现在还没这水平)。

1)一开始的需求构想:提取图片地址,筛除非福利图,只保留美女图片(嘿嘿),保存到同一个文件夹里方便观看;
实际效果:无筛除功能,因为非福利图的来源是新浪图片(大概是),但有些福利图也是这个来源,故不作筛除(还是贪心啊,只要是福利图就不想放过);

2)实际运行结果:在爬取到936张图片(1.99GB)后,由于未知原因程序终止,报错信息:urllib.error.HTTPError: HTTP Error 404: Not Found

现在还是找不出为什么报这个错;另外新手的代码难免繁杂,若有(阿)高(奔)手(哥)看不下去,不吝指点一下怎么写得更简洁,或者怎么解决这个报错,感激不尽!

废话有点多,下面代码奉上(由于cookie含有个人登录信息,怕有高手破解,故用'***'代替):

import urllib.request
import urllib.parse
from bs4 import BeautifulSoup
import re
import os
import time
import socket

socket.setdefaulttimeout(20)  # 设置socket层的超时时间为20秒
url_t = 'http://www.mayi.sg/home.php?mod=space&uid=61184&do=thread&view=me&order=dateline&from=space&'

def handle_request(url):
   headers = {
      'Cookie': '*******************************************************************************',

      'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
   }
   req = urllib.request.Request(url=url, headers=headers)
   content = urllib.request.urlopen(req).read()
   return content

def save(img_url,img_name):
   print('正在保存: {}'.format(img_name))
   if not os.path.exists('./images'):
      os.mkdir(os.path.abspath('./images'))
   img = handle_request(img_url)
   with open(os.path.abspath('./images/{}').format(str(img_name)), 'wb') as fp:
      fp.write(img)

def img_Spider(pa_url):
   #解析内容,生成图片url的列表及图片名列表
   content = handle_request(pa_url).decode('gbk')
   soup = BeautifulSoup(content, 'lxml')
   #定位到:div align="left"
   img_group = soup.find_all('div', align="left")
   for img_subgroup in img_group:
      img_subgroup = str(img_subgroup.find_all('font' > 'font' > 'font'))
      url_pattern = re.compile(r'.*?src="(.*?)".*?',re.S)
      try:
         img_url = url_pattern.findall(img_subgroup)[0]
         # 返回的是一个列表,其中是4个相同的图片url地址,所以取其中任意一个元素
         imgname_pattern = re.compile(r'[^/]+(?!.*jpg|png|gif)')
         # 图片名
         img_name = imgname_pattern.findall(img_url)[-1]
         # 保存图片
         save(img_url, img_name)
      except IndexError:
         pass

def main():
   print('=====开始爬取阿奔发布的图片=====')
   #拼接所有入口的url,构建循环
   page = 1
   while page >= 0:
      data_url = {
         'page': page
      }
      data = urllib.parse.urlencode(data_url)
      main_url = url_t + data
      print('开始爬取第{}个主页: '.format(page) + main_url)
      #构建请求对象,发送请求,获取内容
      content = handle_request(main_url).decode('gbk')
      #解析页面上所有要爬取的链接,生成列表
      soup = BeautifulSoup(content, 'lxml')
      web_list = soup.select('th')[1:]
      #遍历列表,依次获取要爬取的具体页面,启动爬虫
      for url in web_list:
         pa_url = 'http://www.mayi.sg/' + url.a['href']
         img_Spider(pa_url)
         time.sleep(
6)
      time.sleep(
10)
      page +=
1
   print('全部爬取结束!')


if __name__ == '__main__':
   main()

2019-03-09_16-31-31.jpg (218.09 KB, 下载次数: 6)

文件夹截图

文件夹截图

2019-03-09_16-24-09.png (20.88 KB, 下载次数: 6)

2019-03-09_16-24-09.png
回复

使用道具 举报

34

主题

4969

帖子

0

精华

闪电侠

Rank: 6Rank: 6

返现券
0
金币
69
金钱
261
注册时间
2015-7-14
沙发
发表于 2019-3-9 18:33 | 只看该作者 来自苹果客户端来自苹果客户端
老衲奉劝施主,这样不好
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
板凳
 楼主| 发表于 2019-3-9 18:54 | 只看该作者 来自苹果客户端来自苹果客户端
萧① 发表于 2019-3-9 18:33
老衲奉劝施主,这样不好

大师说笑了
回复

使用道具 举报

769

主题

3万

帖子

0

精华

论坛常客

Rank: 8Rank: 8

返现券
0
金币
0
金钱
1914
注册时间
2012-6-23

骨灰级粉丝勋章

地板
发表于 2019-3-9 19:05 | 只看该作者
小伙,你营养快线准备好了吗
回复

使用道具 举报

0

主题

864

帖子

0

精华

黑侠

Rank: 3Rank: 3

返现券
57
金币
0
金钱
14942
注册时间
2009-7-18
5#
发表于 2019-3-9 19:21 | 只看该作者
图片 人工筛选 才行啊,因为要求高嘛
回复

使用道具 举报

73

主题

8690

帖子

2

精华

论坛常客

其实我是个文学家.......

Rank: 8Rank: 8

返现券
273
金币
273
金钱
203
注册时间
2014-10-13

武者勋章高级粉丝勋章

6#
发表于 2019-3-9 19:39 | 只看该作者 来自安卓客户端来自安卓客户端
好厉害的样子,小心游侠兄弟给你封号
   每天看你们发表评论,我都好羡慕 。你们长得又好看 ,还用智能手机,又有钱 ,朋友也多 ,整天讨论一些好像很厉害的东西。我读书少,又是乡下来的,没见过多少世面,所以我只能默默的看着你发,时不时灌个水,有时间自己也发发,这样好像可以假装和你们很熟 ,真的 ,心好累 ,好了不说了 ,我要去喂猪了...唉!
回复

使用道具 举报

53

主题

1万

帖子

0

精华

武神

Rank: 8Rank: 8

返现券
0
金币
328
金钱
180
注册时间
2018-12-26
QQ
7#
发表于 2019-3-9 19:51 | 只看该作者 来自苹果客户端来自苹果客户端
这么厉害的嘛
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
8#
 楼主| 发表于 2019-3-9 19:59 | 只看该作者 来自苹果客户端来自苹果客户端
一棍劈头 发表于 2019-3-9 19:51
这么厉害的嘛

刚入门而已
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
9#
 楼主| 发表于 2019-3-9 20:00 | 只看该作者 来自苹果客户端来自苹果客户端
战神再现 发表于 2019-3-9 19:05
小伙,你营养快线准备好了吗

只存图 不伤身
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
10#
 楼主| 发表于 2019-3-9 20:01 | 只看该作者 来自苹果客户端来自苹果客户端
一滴灌 发表于 2019-3-9 19:21
图片 人工筛选 才行啊,因为要求高嘛

哈哈 不筛了 全都要
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
11#
 楼主| 发表于 2019-3-9 20:01 | 只看该作者 来自苹果客户端来自苹果客户端
猪~有才 发表于 2019-3-9 19:39
好厉害的样子,小心游侠兄弟给你封号

应该不会的。。游大很民主的吧。。
回复

使用道具 举报

96

主题

1万

帖子

0

精华

论坛常客

Rank: 8Rank: 8

返现券
0
金币
106
金钱
284
注册时间
2011-4-2
QQ
12#
发表于 2019-3-9 20:14 | 只看该作者
完全看不懂
每天都是新开始
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
13#
 楼主| 发表于 2019-3-9 20:21 | 只看该作者 来自苹果客户端来自苹果客户端
星光使者 发表于 2019-3-9 20:14
完全看不懂

隔行如隔山 以前我也完全看不懂
回复

使用道具 举报

51

主题

2056

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
170
金钱
1088
注册时间
2019-1-7
14#
发表于 2019-3-9 20:37 | 只看该作者 来自安卓客户端来自安卓客户端
不懂,感觉好厉害的样子?

重庆崽儿不得虚!!!低调做人,高调收拾“社会龙哥”!
回复

使用道具 举报

37

主题

2641

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2998
注册时间
2018-9-9
15#
 楼主| 发表于 2019-3-9 20:48 | 只看该作者 来自苹果客户端来自苹果客户端
重庆崽儿麦麦哥 发表于 2019-3-9 20:37
不懂,感觉好厉害的样子?

还好还好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-11-23 10:17 , Processed in 0.484107 second(s), 58 queries .

© 2001-2011 Powered by Discuz! X3.2. Theme By Yeei!

快速回复 返回顶部 返回列表