爬取虎扑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 ...
随机推荐
- WPF动态创建Image的显示问题
原文:WPF动态创建Image的显示问题 最近学习WPF,看到一篇教程讲解如何动态创建Image控件,自己练手时候无论如何也显示不出图片.刚开始以为是图片的路径有问题,可后来将图片的路径设为相对路径或 ...
- jQuery中的Deferred和promise
promise:http://www.alloyteam.com/2014/05/javascript-promise-mode/ 1 jQuery 中的 Deferred 和 Promises : ...
- UVALive 6531 Go up the ultras 单调栈+RMQ
题目链接:点击打开链接 题意: 给定n座山 以下n个数字表示n座山的高度 若这座山u合法,则要满足: 1.若u的左边存在比u高的山,设v是u左边距离u近期的且严格比u高的山,在[v,u]之间至少有一座 ...
- 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
原文 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题 虽然微软宣称 Windows 10 将是最后一个 Windows 版本,但由于年代跨越 ...
- Linux内核源代码情景分析-fork()
父进程fork子进程: child = fork() fork经过系统调用.来到了sys_fork.具体过程请參考Linux内核源码情景分析-系统调用. asmlinkage int sys_fork ...
- python中对文件、文件夹的操作
python中对文件.文件夹的操作需要涉及到os模块和shutil模块. 创建文件: 1) os.mknod("test.txt") 创建空文件 2) open(&qu ...
- VC实现程序重启的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 很多时候系统有很多配置项,修改了配置项之后能有一个按钮实现系统重启.所谓重启就是杀死系统的当前进程,然后重新开一个新进 ...
- wpf实现仿qq消息提示框
原文:wpf实现仿qq消息提示框 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/huangli321456/article/details/5052 ...
- js 看图识国家
<!DOCTYPE html><html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...
- wpf自定义带刻度的柱状图控件
效果图: 主要代码xaml: <UserControl x:Class="INSControls._01Conning.Steer.ConningSpeedBar" xmln ...