QQ登录

只需要一步,快速开始

 找回密码
 立即注册

QQ登录

只需要一步,快速开始

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

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

[复制链接]

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
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, 下载次数: 86)

文件夹截图

文件夹截图

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

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

使用道具 举报

69

主题

6317

帖子

0

精华

论坛常客

Rank: 8Rank: 8

返现券
60
金币
77
金钱
990
注册时间
2015-8-23
138#
发表于 2019-3-17 08:46 | 只看该作者
大波播 发表于 2019-3-16 18:56
还不快给楼主网址

楼主这种大神级的人物怎么会找不到1024的网址?
身形应当似水流
回复

使用道具 举报

111

主题

2万

帖子

0

精华

资深会员

Rank: 12Rank: 12Rank: 12

返现券
66
金币
300
金钱
91
注册时间
2014-3-29

高级粉丝勋章

137#
发表于 2019-3-16 18:56 | 只看该作者 来自安卓客户端来自安卓客户端
落地乄梅花 发表于 2019-3-11 13:05
楼主去爬一下1024吧


还不快给楼主网址
回复

使用道具 举报

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
2018-9-9
136#
 楼主| 发表于 2019-3-15 14:34 | 只看该作者

嘿嘿 看图很方便
回复

使用道具 举报

284

主题

4万

帖子

0

精华

论坛常客

Rank: 8Rank: 8

返现券
0
金币
0
金钱
51
注册时间
2013-8-16

高级粉丝勋章

135#
发表于 2019-3-15 09:25 来自手机版论坛 | 只看该作者
这样不太好
回复

使用道具 举报

65

主题

2266

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
10
金钱
2685
注册时间
2019-1-12
134#
发表于 2019-3-13 20:32 来自手机版论坛 | 只看该作者
支持!!!!!
回复

使用道具 举报

175

主题

2万

帖子

0

精华

武神

企业人力资源管理师 平 面 设 计 师

Rank: 8Rank: 8

返现券
207
金币
505
金钱
36072
注册时间
2017-8-21
133#
发表于 2019-3-13 18:36 | 只看该作者

有机会我也研究研究!!!
我 · 为 · 战 · 术 · 狂!
回复

使用道具 举报

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
2018-9-9
132#
 楼主| 发表于 2019-3-12 21:08 | 只看该作者 来自苹果客户端来自苹果客户端
20170523 发表于 2019-3-12 18:23
佩服佩服!!!

不敢当不敢当
回复

使用道具 举报

175

主题

2万

帖子

0

精华

武神

企业人力资源管理师 平 面 设 计 师

Rank: 8Rank: 8

返现券
207
金币
505
金钱
36072
注册时间
2017-8-21
131#
发表于 2019-3-12 18:23 | 只看该作者
HenryYang 发表于 2019-3-11 19:28
一开始也看不懂 一步步来的

佩服佩服!!!
我 · 为 · 战 · 术 · 狂!
回复

使用道具 举报

13

主题

2万

帖子

0

精华

武神

Rank: 8Rank: 8

返现券
23
金币
112
金钱
2594
注册时间
2013-6-19
QQ
130#
发表于 2019-3-12 15:51 | 只看该作者
HenryYang 发表于 2019-3-12 09:49
嘿嘿 看图方便多了

是的。。
回复

使用道具 举报

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
2018-9-9
129#
 楼主| 发表于 2019-3-12 09:49 | 只看该作者

嘿嘿 看图方便多了
回复

使用道具 举报

13

主题

2万

帖子

0

精华

武神

Rank: 8Rank: 8

返现券
23
金币
112
金钱
2594
注册时间
2013-6-19
QQ
128#
发表于 2019-3-11 22:08 | 只看该作者
HenryYang 发表于 2019-3-11 10:02
是啊 这些才是冰山一角

老司机
回复

使用道具 举报

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
2018-9-9
127#
 楼主| 发表于 2019-3-11 19:42 | 只看该作者 来自苹果客户端来自苹果客户端
落地乄梅花 发表于 2019-3-11 13:05
楼主去爬一下1024吧

1024是什么
回复

使用道具 举报

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
2018-9-9
126#
 楼主| 发表于 2019-3-11 19:42 | 只看该作者 来自苹果客户端来自苹果客户端
酷酷的裤头 发表于 2019-3-11 12:57
我不关心过程 请给我结果 营养快线已经备好

哈哈 直接看阿奔的帖子呗
回复

使用道具 举报

37

主题

2651

帖子

0

精华

蜘蛛侠

Rank: 5Rank: 5

返现券
0
金币
399
金钱
863
注册时间
2018-9-9
125#
 楼主| 发表于 2019-3-11 19:29 | 只看该作者 来自苹果客户端来自苹果客户端
阻力控 发表于 2019-3-11 15:22
理工男容易营养不良果然是真的

其实我不是理工男 我的专业是文科专业哈哈
回复

使用道具 举报

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

本版积分规则

GMT+8, 2026-4-8 18:30 , Processed in 0.154136 second(s), 59 queries .

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

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