爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷
虎扑是广大jrs的家园,步行街是这个家园里最繁华的地段。据称广大jrs平均学历985,步行街街薪30w起步。
大学时经舍友安利,开始了解虎扑,主要是看看NBA的一些资讯。
偶尔也上上这个破街,看看jrs虐虐狗,说说家长里短等等,别的不说,jr们的三观都是特别正的。
不冷笑话基本是我每天必看的帖子,感觉楼主非常敬业,每天都会有高质量的输出,帖子下的热帖也很给力,福利满满。
正学python,突发奇想想把不冷笑话的图都爬下来。
但是虎扑在这块有限制,不登录无法查看用户的帖子,而我目前又懒得弄登陆认证(主要是还没学通-_-||)。
经过长期的观察验证,我发现不冷笑话每次都在首页主干道的固定位置,于是萌生出了直接从首页定位到帖子里的想法。
说干就干,经过我的一通分析,终于把程序写好了,爬虫的工作流程如下:
1、定位不冷笑话在首页的位置,获取链接和标题
2、建立以标题命名的目录,如果目录存在,说明已下载,程序结束
3、进入不冷笑话的界面,获取正文中的图片链接,存入列表
4、获取亮贴中的图片链接,存入列表
5、保存图片,根据传入参数为正文或评论进行命名,区分图片来源
6、大功告成
#-*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import os, time
import re
url = (r'https://nba.hupu.com/') #获取不冷笑话在首页的位置,返回url和标题
def get_buleng_title_url(url):
index_html = requests.get(url)
index_html_s = BeautifulSoup(index_html.text,'lxml')
main_street = index_html_s.find(class_ = 'gray-list main-stem max250')
url_list = []
url_name_list = []
for dd in main_street.find_all('dd',limit = 5):
url_list.append(dd.a.get('href'))
url_name_list.append(dd.a.get_text())
return [url_list[4],url_name_list[4]] #获取不冷笑话正文中的图片列表,利用set去重
def get_pic_url(buleng_list):
pic_url_list = set()
buleng_html = requests.get(buleng_list[0])
buleng_html_s = BeautifulSoup(buleng_html.text,'lxml')
buleng_content = buleng_html_s.find(class_='quote-content')
for pic_url in buleng_content.find_all('img'):
try:
original_url = pic_url.get('data-original')
pic_url_list.add(original_url.split('?')[0])
except:
pic_url_list.add(pic_url.get('src'))
return pic_url_list #创建以标题命名的文件夹,并返回是否创建成功
def makedir(buleng_list):
path = ('E:\\pic\\%s' % buleng_list[1])
if os.path.exists(path):
return 0
else:
os.makedirs(path)
return path #获取亮贴中的图片列表,set去重 def get_comment_pic_url(buleng_list):
comment_pic_url_list = set()
buleng_html = requests.get(buleng_list[0])
buleng_html_s = BeautifulSoup(buleng_html.text,'lxml')
buleng_comment = buleng_html_s.find(id='readfloor')
for floor in buleng_comment.find_all('table'):
for pic_url in floor.find_all('img'):
try:
original_url = pic_url.get('data-original')
comment_pic_url_list.add(original_url.split('?')[0])
except:
comment_pic_url_list.add(pic_url.get('src'))
return comment_pic_url_list #下载图片,可下载gif、jpg、png格式
def download_pic(pic_url_list,path,pic_from = '正文'):
a = 1
for url in pic_url_list :
if url.endswith('.gif'):
pic = requests.get(url)
with open((path+('\\%s-%s.gif' % (pic_from,a))),'wb') as f:
f.write(pic.content)
f.close
print('下载一张%s动图' % pic_from)
a += 1
if url.endswith('.jpg'):
pic = requests.get(url)
with open((path+('\\%s-%s.jpg' % (pic_from,a))),'wb') as f:
f.write(pic.content)
f.close
print('下载一张%sjpg图' % pic_from)
a +=1
if url.endswith('.png'):
pic = requests.get(url)
with open((path+('\\%s-%s.png' % (pic_from,a))),'wb') as f:
f.write(pic.content)
f.close
print('下载一张%spng图' % pic_from)
a +=1 if __name__ == "__main__":
buleng = get_buleng_title_url(url)
path = makedir(buleng)
if path != 0:
pic_url_list = get_pic_url(buleng)
comment_pic_url_list = get_comment_pic_url(buleng)
download_pic(pic_url_list,path)
download_pic(comment_pic_url_list,path,'评论')
else:
print('目录已存在,等待虎扑更新')
总结:
这个程序的主要判定贴子位置的办法就是首页帖子顺序,稍微修改一下也可以爬取主干道的其他推荐热帖,代码就不放了。
补充:
我已经把写的爬取推荐热帖的代码,放到了GitHub上,还没太搞懂Git的用法,大家多指教
地址:https://github.com/mathdogggg/zhugandao
爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷的更多相关文章
- [python爬虫] Selenium定向爬取虎扑篮球海量精美图片
前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员 ...
- 通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息
源代码:https://github.com/nnngu/LagouSpider 效果预览 思路 1.首先我们打开拉勾网,并搜索"java",显示出来的职位信息就是我们的目标. 2 ...
- Python爬取腾讯新闻首页所有新闻及评论
前言 这篇博客写的是实现的一个爬取腾讯新闻首页所有的新闻及其所有评论的爬虫.选用Python的Scrapy框架.这篇文章主要讨论使用Chrome浏览器的开发者工具获取新闻及评论的来源地址. Chrom ...
- python爬取博客圆首页文章链接+标题
新人一枚,初来乍到,请多关照 来到博客园,不知道写点啥,那就去瞄一瞄大家都在干什么好了. 使用python 爬取博客园首页文章链接和标题. 首先当然是环境了,爬虫在window10系统下,python ...
- python3爬虫-爬取新浪新闻首页所有新闻标题
准备工作:安装requests和BeautifulSoup4.打开cmd,输入如下命令 pip install requests pip install BeautifulSoup4 打开我们要爬取的 ...
- python爬取快手ios端首页热门视频
最近快手这种小视频app,特别的火,中午吃过午饭,闲来无聊,想搞下快手的短视频,看能不能搞到. 于是乎, 打开了fiddler,开始准备抓包, 设置代理,重启,下一步,查看本机ip 手机打开网络设置 ...
- python爬去虎扑数据信息,完成可视化
首先分析虎扑页面数据 如图我们所有需要的数据都在其中所以我们获取需要的内容直接利用beaitifulsoupui4``` soup.find_all('a',class_ ...
- 小爬虫。爬取网站多页的通知标题并存取在txt文档里。
爬取网页中通知标题的内容展示: this is 1 page!<精算学综合>科目考试参考大纲2016年上半年研究生开题报告评议审核结果公示[答辩]2016下半年研究生论文答辩及学位评定 ...
- Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)
一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有request ...
随机推荐
- Struts2——(1)Struts2入门
1.Struts2历史,与Struts1的关系 两者的内部基于的原理完全不同,Struts2是基于WebWork发展而来的框架. 两者都是基于MVC实现的框架. Struts1是Apach推出的. W ...
- delphi之IOCP学习(一)
困扰已久的网络通信(IOCP:完成端口),今天终于揭开她的神秘面纱了,之前百度N久还是未能理解IOCP,网络上好多博文都没有贴出源码,初学者很难正在理解IOCP并自己写出通信例子 ,经过努力,今天自己 ...
- CentOS 由 JavaCPP 转让 FFMPEG
1. Java 与 FFMPEG FFMPEG 它是一种广泛使用的媒体处理库,于Java天地,处理视频较弱的能力,因此,有非常大的需求需求Java 转让 FFMPEG. Java 转让C 的方式有非常 ...
- Java内部类——学习笔记
参考:http://blog.csdn.net/aaronsi/article/details/187322 和 http://openhome.cc/Gossip/JavaGossip-V1/Inn ...
- go语言刷leetcode - 53 Maximum Subarray
package main import ( "fmt" "math" ) func maxSubArray(nums []int) int { var larg ...
- 参数的范数正则/惩罚(parameter norm penalties)
1. L2 范数 J~(w;X,y)=J(w;X,y)+α2wTw J 表示的是原始的目标函数,J~ 则是二范数约束后的新的目标函数. 则根据梯度下降算法有: ∇wJ~=∇wJ+αw w←w−ϵ∇wJ ...
- Qt 绘制平滑曲线
本文介绍在 Qt 中绘制平滑曲线的实现,调用下面的函数 SmoothCurveGenerator::generateSmoothCurve(points) 即可.默认曲线的 2 个顶点之间被分割为 1 ...
- 关于FileZilla上传文件后服务器端文件与本地文件大小不一致的解决方法
最近在调试网站时发现,通过ftp上传工具FileZilla上传至服务器端的文件与本地文件大小不一致,虽然没有影响网站的最终显示效果,但仍让我困惑不解.后发现是传输类型的原因,解决方法如下: 中文版Fi ...
- Spring Assert.notNull--IllegalArgumentException
Exception in thread "main" java.lang.IllegalArgumentException: Source must not be null at ...
- Linux性能测试 netstat命令
功能说明:Netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况.语 法:netstat [-acCeFghilMnNoprstuvVwx][- ...