开始动手的时候毫无头绪,主要借鉴了以下帖子:

https://blog.csdn.net/sinat_28797501/article/details/70195443

但是后来发现代码中还是有一些不太妥当之处,不知是因为网站更新换代、结构改变,还是代码或环境有所差异,修修补补之后,还是完成了图片的爬取。(ps:原贴做的还是很好的哈哈哈膜一波)

主要修改的几个地方:

原帖中图片存储时,格式出现了一点问题,可能是作者手误(gif图片无法保存为gif格式,只能为jepg)或者有其他考虑;

可能存在网站更新换代的情况,在收集帖子url的时候发现不存在原帖中的<tr>?跑到hupu爆照区重新看了一眼网页代码发现已经没这个结构了(原贴貌似用的是table),换成<ul>和<a>了(tagtable和tagstr);

环境不同,作者似乎用的是python2,我的是anaconda3,用到的urllib包版本也不同,作者是urllib2;

调试期间的一些小改动,为找bug,不再赘述(比如为了省事注释掉写文本文件的部分-_-!)。

之后爬了爆照区和什么图都有区,效果嘛,如下~

代码如下:


import urllib
import urllib3
from bs4 import BeautifulSoup
import loggingclass Item(object):title = None  # 帖子标题firstAuthor = None  # 帖子原作者firstTime = None  # 帖子创建时间reNum = None  # 帖子回复浏览数量LastTime = None  # 帖子最后回复时间LastAuthor = None  # 帖子最后回复作者link = None  # 帖子链接# 全局方法获取网页内容
def getResponseContent(url):try:response = urllib.request.urlopen(url,timeout = 20)htext = response.read()except:logging.error(u'Python返回URL:{}数据失败'.format(url))# print(url)return Noneelse:logging.info(u'Python返回URL:{}数据成功'.format(url))return htextclass getHupuInfo(object):def __init__(self, url):self.url = urlself.pageSum = 100  # 帖子页数做多100页self.urls = self.getUrls(self.pageSum)self.items = self.spider(self.urls)self.pipelines(self.items)def getUrls(self, pageSum):urls = []urls.append(self.url)for pn in range(1, pageSum):tempurl = self.url + '-' + str(pn + 1)urls.append(tempurl)logging.info(u'获取URLS成功!\n')return urlsdef spider(self, urls):items = []for url in urls:htmlContent = getResponseContent(url)# print(url)if htmlContent != None:soup = BeautifulSoup(htmlContent, 'lxml')tagtable = soup.find('ul','for-list')if tagtable == None:continue# tagtable = _tagtable.find_all('a')# print(tagtable)tagstr = tagtable.find_all('a','truetit')# print("tagggggggggggggg   ")# print(tagstr)flag = 0  # 跳过标题栏for tag in tagstr:# print('taaaag ')# print(tag)if flag == 0:flag += 1continueelse:flag += 1item = Item()item.link = tag.get('href')  # 直接抓取href属性作为帖子链接# item.title = tag.find('td', attrs={'class': 'p_title'}).find('a',#                                                          href=item.link).get_text()  # 通过item.link来确定标题# item.firstAuthor = tag.find('td', attrs={'class': 'p_author'}).a.get_text()# item.firstTime = tag.find('td', attrs={'class': 'p_author'}).get_text()# item.reNum = tag.find('td', attrs={'class': 'p_re'}).get_text()# item.LastAuthor = tag.find('td', attrs={'class': 'p_retime'}).a.get_text()# item.LastTime = tag.find('td', attrs={'class': 'p_retime'}).get_text()items.append(item)logging.info(u'获取帖子成功')return itemsdef pipelines(self, items):# i = 0fileName = u'Hupu_bxj.txt'with open(fileName, 'w') as fp:for item in items:ss = 0# i = i + 1# fp.write('{}\t{}\t{}\t{}\t{}\t{}\n{}\n\n'.format(item.title,item.firstAuthor,item.firstTime,item.reNum,item.LastAuthor,item.LastTime,item.link))# fp.write('i = '+str(i)+'\n')  # 为了生词词云,这里只提取了题目logging.info(u'写入文本成功')def getpiclink(self):piclink = []for item in self.items:piclink.append(self.url[0:20] + item.link)logging.info(u'返回图片帖子链接成功')return piclinkclass picInfo(object):def __init__(self, links):self.links = linksself.imgurls = []self.spider()self.pipeline()def spider(self):if self.links == None:logging.error('无图片链接')else:for link in self.links:htmlContent = getResponseContent(link)if htmlContent == None:continuesoup = BeautifulSoup(htmlContent, 'lxml')tagDiv = soup.find('div', attrs={'id': 'tpc'})img = tagDiv.find('div', attrs={'class': 'quote-content'}).find_all('img')if img == None:continueelse:for subimg in img:# 解决图片未加载的情况if subimg.get('data-original') == None:imgurl = subimg.get('src')else:imgurl = subimg.get('data-original')self.imgurls.append(imgurl)logging.info(u'获取图片链接成功')def pipeline(self):for i in range(len(self.imgurls)):# 根据链接后缀确定图片类型if self.imgurls[i][-3:] == 'png':imgname = str(i) + '.png'elif self.imgurls[i][-3:] == 'jpg':imgname = str(i) + '.jpg'elif self.imgurls[i][-4:] == 'jpeg':imgname = str(i) + '.jpeg'elif self.imgurls[i][-3:] == 'gif':imgname = str(i) + '.gif'elif self.imgurls[i][-4:] == 'webp':imgname = str(i) + '.webp'img = getResponseContent(self.imgurls[i])with open('file_with_10pages/'+imgname, 'ab') as fp:if img == None:continuefp.write(img)logging.info(u'写入图片成功')if __name__ == '__main__':logging.basicConfig(level=logging.INFO)url = u'https://bbs.hupu.com/4846'HUPU = getHupuInfo(url)picurls = HUPU.getpiclink()PIC = picInfo(picurls)

本人是个菜鸡,欢迎各位提出改进意见哈~

python爬虫爬取虎扑步行街爆照区图片相关推荐

  1. Python网络爬虫爬取虎扑步行街爆照区话题

    Python网络爬虫爬取虎扑步行街爆照区话题 作者:郜科科 最近的任务挺多的,但是心情很烦躁,想做一些自己喜欢的东西,前些时候感觉Python爬虫很好玩,就自学了一下.本人比较喜欢逛街--虎扑步行街, ...

  2. Python爬取虎扑步行街,爆照区中的照片

    使用的是Python3+reqeusts 源码如下 更新于2017年9月16日 #encoding:gbk import requests import re import timedef get_p ...

  3. python网络爬虫-爬取虎扑步行街数据

    前言 由于虎扑页面的限制,因为访问虎扑步行街的第11个页面就需要用户进行登录,鉴于此时技术还没有学全,只能爬取1到10的页面. 抓取什么数据 帖子名称 帖子链接 发帖人 发帖人链接 发帖时间 帖子回复 ...

  4. BeautifulSoup爬取虎扑步行街信息到Mysql

    人生苦短,我用python 今天给大家爬取虎扑步行街的详细信息 效果图如下: 首先根据虎扑步行街链接获取前十个页面链接 for i in range(1, 10):link = "https ...

  5. Python爬虫爬取王者荣耀英雄人物高清图片

    Python爬虫爬取王者荣耀英雄人物高清图片 实现效果: 网页分析 从第一个网页中,获取每个英雄头像点击后进入的新网页地址,即a标签的 href 属性值: 划线部分的网址是需要拼接的 在每个英雄的具体 ...

  6. 爬取虎扑步行街——秋名山论美美女壁纸图片

    最近学了学爬虫,由于平时笔者经常刷虎扑,于是决定实战一下,对虎扑上的美女图片进行爬取,特地来分享一下经验. 这次主要使用了request和BeautifulSoup两个库,使用urllib库对图片进行 ...

  7. 爬取虎扑步行街论坛数据保存到MySQL、MongoDB

    本文内容围绕获取虎扑步行街论坛上所有帖子的数据开展的,爬取的内容包括帖子名称.帖子链接.作者.作者链接.创建时间.回复数.浏览数.最后回复用户和最后回复时间,将爬取的数据分别保存在MongoDB和My ...

  8. python爬虫爬取虎扑湖人论坛专区帖子数据,并存入MongoDB数据库中

    今天就带大家从头到尾一步一步带着大家爬取虎扑论坛帖子的数据,里面涉及到的一些知识,我会给出学习的连接,大家可以自行去学习查看. 前期准备 首先我们打开虎扑NBA论坛,我选择的是湖人专区(小湖迷一个). ...

  9. python爬虫爬取王者荣耀官网全部装备图片(源码分享)

    这篇文章为源码分享,爬虫的分析过程请阅读文章 <用python爬取王者荣耀官网的英雄皮肤海报(含源码)> 源码 import requests from bs4 import Beauti ...

最新文章

  1. (转)SpringBoot系列—Redis使用
  2. C 语言编程 — 运算符
  3. 容器网络|深入理解Cilium
  4. some VM operation when debugging appointment startup
  5. vo listVO paggerHelper mapper使用原则
  6. Gartner 发布2019年超融合魔力象限:新增深信服一员!
  7. MongoDB出错:ERROR: child process failed, exited with error number 1 To see additional infor
  8. 删除计算机共享信息命令,win10系统使用命令将网络共享删除的操作办法
  9. LinuxMint下的Orionode源码安装
  10. Java中的AtomicInteger
  11. 【一天一个C++小知识】011.C++编译的流程
  12. 【黑苹果】宏基Acer Predator Helios 300+ i7-7700HQ+Opencore +MacOS10.14.6 efi文件下载!
  13. 最全CTF Web题思路总结(更新ing)
  14. Python编写三角形
  15. Windows每次开机键盘无法使用,需要重新拔插键盘USB接口的解决方案
  16. 雷电模拟器修改系统语言
  17. 三维视频融合 倾斜摄影模型 开放c++源代码 支持与java js交互 内嵌web容器 可用于雪亮工程 等 安防项目 稳定流畅 点卯系列
  18. Awesome Chrome 插件集锦
  19. 耕、林、园地分类搞不定?PIE-Engine机器学习带你攻克难题
  20. 华为云计算产品白皮书与案例合集

热门文章

  1. Soot I: 基本了解
  2. 如何注册dll、ocx控件
  3. SQL语句--跨数据库实例联查
  4. Java格式化日期的方法
  5. ROS机器人操作系统底层原理及代码剖析
  6. 一文了解WebSocket(实战)----python篇
  7. 2022-2028全球及中国信息和通信技术(ICT)资本支出行业研究及十四五规划分析报告
  8. 机器学习之统计分析(2)
  9. axios中文官方文档
  10. Java实验三 面向对象:编写一个类,实现银行账户,并完成程序的测试。