QQ登录

只需要一步,快速开始

 找回密码
 立即注册

QQ登录

只需要一步,快速开始

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

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

[复制链接]

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
跳转到指定楼层
楼主

    最近半个月,我开始自学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, 下载次数: 4)

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

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
沙发
 楼主| 发表于 2019-3-9 18:54 | 显示全部楼层 来自苹果客户端来自苹果客户端
萧① 发表于 2019-3-9 18:33
老衲奉劝施主,这样不好

大师说笑了
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
板凳
 楼主| 发表于 2019-3-9 19:59 | 显示全部楼层 来自苹果客户端来自苹果客户端
一棍劈头 发表于 2019-3-9 19:51
这么厉害的嘛

刚入门而已
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
地板
 楼主| 发表于 2019-3-9 20:00 | 显示全部楼层 来自苹果客户端来自苹果客户端
战神再现 发表于 2019-3-9 19:05
小伙,你营养快线准备好了吗

只存图 不伤身
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
5#
 楼主| 发表于 2019-3-9 20:01 | 显示全部楼层 来自苹果客户端来自苹果客户端
一滴灌 发表于 2019-3-9 19:21
图片 人工筛选 才行啊,因为要求高嘛

哈哈 不筛了 全都要
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

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

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

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

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

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

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
8#
 楼主| 发表于 2019-3-9 20:48 | 显示全部楼层 来自苹果客户端来自苹果客户端
重庆崽儿麦麦哥 发表于 2019-3-9 20:37
不懂,感觉好厉害的样子?

还好还好
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
9#
 楼主| 发表于 2019-3-9 21:04 | 显示全部楼层 来自苹果客户端来自苹果客户端
一棍劈头 发表于 2019-3-9 20:54
水神是你

是我是我
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
10#
 楼主| 发表于 2019-3-9 21:05 | 显示全部楼层 来自苹果客户端来自苹果客户端
songmingyuee 发表于 2019-3-9 20:58
你抢了别人的帖子了

什么意思 没懂。。
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
11#
 楼主| 发表于 2019-3-9 21:05 | 显示全部楼层 来自苹果客户端来自苹果客户端
一棍劈头 发表于 2019-3-9 20:56
你会忍不住的

不会的。。看图片真不会。。
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
12#
 楼主| 发表于 2019-3-9 21:06 | 显示全部楼层 来自苹果客户端来自苹果客户端
wms 发表于 2019-3-9 20:51
看不懂  算你厉害

哈哈 还好还好
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
13#
 楼主| 发表于 2019-3-9 21:59 | 显示全部楼层 来自苹果客户端来自苹果客户端
一棍劈头 发表于 2019-3-9 21:16
快继续水

发帖就是水啊 哈哈
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
14#
 楼主| 发表于 2019-3-9 22:00 | 显示全部楼层 来自苹果客户端来自苹果客户端
一棍劈头 发表于 2019-3-9 21:17
那你不厉害

看视频是可能会的
回复

使用道具 举报

37

主题

2636

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
202
金钱
2233
注册时间
2018-9-9
15#
 楼主| 发表于 2019-3-9 22:00 | 显示全部楼层 来自苹果客户端来自苹果客户端
平歌 发表于 2019-3-9 21:38
这是搞高科技?

算不上 一个脚本程序而已
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-5-11 02:15 , Processed in 0.179303 second(s), 56 queries .

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

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