爬取虎扑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(‘目录已存在,等待虎扑更新‘)

总结:

这个程序的主要判定贴子位置的办法就是首页帖子顺序,稍微修改一下也可以爬取主干道的其他推荐热帖,代码就不放了。

原文地址:https://www.cnblogs.com/mathbox/p/9182388.html

时间: 2024-10-10 22:22:01

爬取虎扑NBA首页主干道推荐贴的一只小爬虫,日常爬不冷笑话解闷的相关文章

[python爬虫] Selenium定向爬取虎扑篮球海量精美图片

前言: 作为一名从小就看篮球的球迷,会经常逛虎扑篮球及湿乎乎等论坛,在论坛里面会存在很多精美图片,包括NBA球队.CBA明星.花边新闻.球鞋美女等等,如果一张张右键另存为的话真是手都点疼了.作为程序员还是写个程序来进行吧!        所以我通过Python+Selenium+正则表达式+urllib2进行海量图片爬取.        前面讲过太多Python爬虫相关的文章了,如爬取新浪博客.维基百科Infobox.百度百科.游迅网图片,也包括Selenium安装过程等等,详见我的两个专栏: 

通俗易懂的分析如何用Python实现一只小爬虫,爬取拉勾网的职位信息

源代码:https://github.com/nnngu/LagouSpider 效果预览 思路 1.首先我们打开拉勾网,并搜索"java",显示出来的职位信息就是我们的目标. 2.接下来我们需要确定,怎样将信息提取出来. 查看网页源代码,这时候发现,网页源代码里面找不到职位相关信息,这证明拉勾网关于职位的信息是异步加载的,这也是一种很常用的技术. 异步加载的信息,我们需要借助 chrome 浏览器的开发者工具进行分析,打开开发者工具的方法如下: 点击Nerwork进入网络分析界面,这

PHP爬取糗事百科首页糗事

突然想获取一些网上的数据来玩玩,因为有SAE的MySql数据库,让它在那呆着没有什么卵用!于是就开始用PHP编写一个爬取糗事百科首页糗事的小程序,数据都保存在MySql中,岂不是很好玩! 说干就干!首先确定思路 获取HTML源码--->解析HTML--->保存到数据库 没有什么难的 1.创建PHP文件"getDataToDB.php", 2.获取指定URL的HTML源码 这里我用的是curl函数,详细内容参见PHP手册 代码为 <span style="fo

【Python3 爬虫】爬取博客园首页所有文章

首先,我们确定博客园首页地址为:https://www.cnblogs.com/ 我们打开可以看到有各种各样的文章在首页,如下图: 我们以上图标记的文章为例子吧!打开网页源码,搜索Docker,搜索结果如下图: 从上图后红色标记部分可以看出,我们使用正则表达式即可匹配该网址,我们匹配到该网址之后,将该网址对应的内容下载到到底进行存储. 实现代码 import urllib.request import re """ 爬取cnblogs首页所有的文章 ""&

爬虫实例——爬取淘女郎的相册(通过谷歌浏览器的开发者工具找出规律快速爬取)

用正常的方式(selenium.PhantomJS.BeautifulSoup)爬取淘女郎相册不仅困难,效率很低,而且很容易卡死. 我通过谷歌浏览器的开发者工具找出每个页面的规律,快速获取每张照片的链接,再下载,这样效率就很高了. 过程 首页很简单,没有采用JS渲染,直接用requests就能获取完整的源代码,没什么说的. 淘女郎首页采用了JS渲染,直接用requests是获取不到完整的源代码的,此时可以打开谷歌浏览器的开发者工具,主要看“Network”,筛选出“XHR”,如下图: 从上图可知

Python3实现QQ机器人自动爬取百度文库的搜索结果并发送给好友(主要是爬虫)

一.效果如下: 二.运行环境: win10系统:python3:PyCharm 三.QQ机器人用的是qqbot模块 用pip安装命令是: pip install qqbot (前提需要有requests库) 实现自己的机器人:网上好几种写法,很简单,不过有时候环境不同会出现错误,下面是亲测可以运行的: from qqbot import QQBotSlot as qqbotslot, RunBot @qqbotslot def onQQMessage(bot, contact, member,

一个简单的爬取b站up下所有视频的所有评论信息的爬虫

心血来潮搞了一个简单的爬虫,主要是想知道某个人的b站账号,但是你知道,b站在搜索一个用户时,如果这个用户没有投过稿,是搜不到的,,,这时就只能想方法搞到对方的mid,,就是 space.bilibili.com/9444976 后面的那一串数字.偶然看到这个人关注了某个主播,,想到可能这个人会回复主播的视频,于是想着爬到所有up下的视频的评论对应的用户,这样我就可以在数据库里检索昵称得到mid,,,嘿嘿嘿(然而失败了,,不是所有人都像我这么无聊,,,,有些人真的看视频不会回复,, 项目地址: h

python-一个小爬虫,爬取图片

import re import urllib.request # 爬取网页 def getHtml(url): page=urllib.request.urlopen(url) html=page.read() return html # 获取图片地址 def getImg(html): rule=r'src="(.*?\.jpg)" width' rule_compile=re.compile(rule) Img_list=re.findall(rule_compile,html.

python爬取博客园首页文章

先上代码,比较长. 1 # -*- coding=utf-8 -*- 2 __author__ = 'lhyz' 3 4 import urllib 5 import re 6 import socket 7 import time 8 import os 9 10 #使用当前时间创建文件夹 11 ISOTIMEFORMAT='%Y-%m-%d-%X' 12 times=time.strftime( ISOTIMEFORMAT, time.localtime() ) 13 dir='./%s'%