python 福利吧_段友福利:Python爬取段友之家贴吧图片和小视频

由于最新的视频整顿风波,内涵段子APP被迫关闭,广大段友无家可归,但是最近发现了一个“段友”的app,版本更新也挺快,正在号召广大段友回家,如下图,有兴趣的可以下载看看(ps:我不是打广告的,没收广告费的)

然后呢,看到上面,确实好多段友在上面,于是乎,我就想爬取他们的图片和小视频,就有了这篇文章的主题:

其实吧,用Python爬取网站数据是最基础的东西,也不难,但是我还想分享给大家,一起学习和交流。

爬取这些网站里的数据主要用的模块是bs4、requests以及os,都是常用模块

大概思路就是通过requests模块请求网页html数据,然后通过bs4模块下的BeautifulSoup分析请求的网页,然后通过css查找器查找内涵段子的图片以及小视频的地址,主要实现代码如下:

def download_file(web_url):

"""获取资源的url"""

# 下载网页

print('正在下载网页: %s...' % web_url)

result = requests.get(web_url)

soup = bs4.BeautifulSoup(result.text, "html.parser")

# 查找图片资源

img_list = soup.select('.vpic_wrap img')

if img_list == []:

print('未发现图片资源!')

else:

# 找到资源,开始写入

for img_info in img_list:

file_url = img_info.get('bpic')

write_file(file_url, 1)

# 查找视频资源

video_list = soup.select('.threadlist_video a')

if video_list == []:

print('未发现视频资源!')

else:

# 找到资源,开始写入

for video_info in video_list:

file_url = video_info.get('data-video')

write_file(file_url, 2)

print('下载资源结束:', web_url)

next_link = soup.select('#frs_list_pager .next')

if next_link == []:

print('下载资料结束!')

else:

url = next_link[0].get('href')

download_file('https:' + url)

得到图片以及视频的地址之后,肯定还不够,还得把这些资源写入到本地,方式是通过二进制的方式来读取远程文件资源,然后分类写入到本地,实现的主要代码如下:

def write_file(file_url, file_type):

"""写入文件"""

res = requests.get(file_url)

res.raise_for_status()

# 文件类型分文件夹写入

if file_type == 1:

file_folder = 'nhdz\\jpg'

elif file_type == 2:

file_folder = 'nhdz\\mp4'

else:

file_folder = 'nhdz\\other'

folder = os.path.exists(file_folder)

# 文件夹不存在,则创建文件夹

if not folder:

os.makedirs(file_folder)

# 打开文件资源,并写入

file_name = os.path.basename(file_url)

str_index = file_name.find('?')

if str_index > 0:

file_name = file_name[:str_index]

file_path = os.path.join(file_folder, file_name)

print('正在写入资源文件:', file_path)

image_file = open(file_path, 'wb')

for chunk in res.iter_content(100000):

image_file.write(chunk)

image_file.close()

print('写入完成!')

最后,再奉上完整的代码吧。要不然,会被人说的,说话说一半,说福利,也不给全,这就太不够意思了。客官别急,马上奉上……

#!/usr/bin/env python

# -*- coding: utf-8 -*-

"""

爬取百度贴吧,段友之家的图片和视频

author: cuizy

time:2018-05-19

"""

import requests

import bs4

import os

def write_file(file_url, file_type):

"""写入文件"""

res = requests.get(file_url)

res.raise_for_status()

# 文件类型分文件夹写入

if file_type == 1:

file_folder = 'nhdz\\jpg'

elif file_type == 2:

file_folder = 'nhdz\\mp4'

else:

file_folder = 'nhdz\\other'

folder = os.path.exists(file_folder)

# 文件夹不存在,则创建文件夹

if not folder:

os.makedirs(file_folder)

# 打开文件资源,并写入

file_name = os.path.basename(file_url)

str_index = file_name.find('?')

if str_index > 0:

file_name = file_name[:str_index]

file_path = os.path.join(file_folder, file_name)

print('正在写入资源文件:', file_path)

image_file = open(file_path, 'wb')

for chunk in res.iter_content(100000):

image_file.write(chunk)

image_file.close()

print('写入完成!')

def download_file(web_url):

"""获取资源的url"""

# 下载网页

print('正在下载网页: %s...' % web_url)

result = requests.get(web_url)

soup = bs4.BeautifulSoup(result.text, "html.parser")

# 查找图片资源

img_list = soup.select('.vpic_wrap img')

if img_list == []:

print('未发现图片资源!')

else:

# 找到资源,开始写入

for img_info in img_list:

file_url = img_info.get('bpic')

write_file(file_url, 1)

# 查找视频资源

video_list = soup.select('.threadlist_video a')

if video_list == []:

print('未发现视频资源!')

else:

# 找到资源,开始写入

for video_info in video_list:

file_url = video_info.get('data-video')

write_file(file_url, 2)

print('下载资源结束:', web_url)

next_link = soup.select('#frs_list_pager .next')

if next_link == []:

print('下载资料结束!')

else:

url = next_link[0].get('href')

download_file('https:' + url)

# 主程序入口

if __name__ == '__main__':

web_url = 'https://tieba.baidu.com/f?ie=utf-8&kw=段友之家'

download_file(web_url)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
__event 可以理解为一个事件,它在 Python 中可以被用来触发和处理各种事件的发生。而 __eventargument 则是事件的参数,它用来传递对事件的相关信息进行处理。 在自动爬取的场景中,可以使用 __event 和 __eventargument 来自动触发和处理爬取的事件。 在 Python 中,我们可以使用第三方库如 BeautifulSoup、Requests 和 Scrapy 等来实现自动爬取网页的功能。我们可以通过编写对应的代码来触发爬取事件,并使用 __eventargument 来传递参数。 例如,我们可以定义一个爬取网页内容的事件,当触发这个事件时,通过 __eventargument 传递需要爬取的网页的地址。在处理事件时,我们可以使用对应的库来发送请求并获取网页内容,并对内容进行解析和提取需要的信息。 下面是一个简单的示例代码: ``` import requests def crawl(url): # 发送请求并获取网页内容 response = requests.get(url) # 解析网页内容,提取需要的信息 # ... # 定义爬取事件的处理函数 def on_crawl(__eventargument): url = __eventargument crawl(url) # 触发爬取事件,并传递需要爬取的网页地址作为参数 __event = 'crawl' __eventargument = 'https://www.example.com' on_crawl(__eventargument) ``` 通过以上代码,我们定义了一个爬取事件 on_crawl,当事件触发时,会自动调用 crawl 函数来爬取指定的网页内容。我们通过将需要爬取的网页地址作为 __eventargument 的值传递给事件处理函数,从而实现了自动爬取的功能。 总而言之,__event 和 __eventargument 是在 Python 中用来触发和处理事件的机制,在自动爬取的场景中,可以利用它们来实现自动触发和处理爬取的事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值