import requests
from lxml import etree
from bs4 import BeautifulSoup
import jsonclass QiuShi(object):#构造方法def __init__(self):self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"}self.base_url = "https://www.qiushibaike.com/8hr/page/{}"#请求方法def get_html_text(self, url):response = requests.get(url, headers=self.headers)if response.status_code == 200:return response.textelse:return None#解析列表页方法,返回详情页urldef parse_list_page(self, text):html = etree.HTML(text)urls = html.xpath("//a[@class='recmd-content']/@href")urls = list(map(lambda u: "https://www.qiushibaike.com" + u, urls))return urls#解析详情页方法,返回抓取数据def parse_detail_page(self, text):soup =  BeautifulSoup(text, "lxml")item = {}author = soup.find("span", attrs={"class": "side-user-name"}).stringcontent = soup.find("div", attrs={"class":"content"}).stringvideo = soup.find("video")if video:video_url = "https:" + soup.find("video").find("source").get("src")else:video_url = Noneimages = soup.find("div", attrs={"class":"thumb"})if images:img_urls = [i.get("src") for i in images.find_all("img")]img_urls = list(map(lambda u: "http:" + u, img_urls))else:img_urls = Nonelike_num = soup.find("i", attrs={"class":"number"}).stringitem["author"] = authoritem["content"] = contentitem["video_url"] = video_urlitem["img_urls"] = img_urlsitem["like_num"] = like_numreturn item#保存数据方法def save_imgAndVideo(self, item):img_urls = item["img_urls"]video_url = item["video_url"]i = 0if img_urls:for u in img_urls:with open("./data/糗事百科爬虫图片与视频数据/" + item["author"] + str(i) + ".jpg", "wb") as fp:fp.write(requests.get(u, headers=self.headers).content)i += 1print("the image save to local successful...")if video_url:with open("./data/糗事百科爬虫图片与视频数据/" + item["author"] + str(i) + ".mp4", "wb") as fp:fp.write(requests.get(video_url, headers=self.headers).content)i += 1print("the video save to local successful...")#保存图片和视频方法def save_item_toJson(self, item):with open("./data/糗事百科爬虫数据.json", "a", encoding="utf-8") as fp:json.dump(item, fp, ensure_ascii=False)fp.write("\n")print(item["author"] + "succesful save to local document of json...")self.save_imgAndVideo(item)#主方法def run(self):for i in range(1,10):text = self.get_html_text(self.base_url.format(i))detail_urls = self.parse_list_page(text)for url in detail_urls:text = self.get_html_text(url)item = self.parse_detail_page(text)self.save_item_toJson(item)if __name__ == '__main__':qs = QiuShi()qs.run()

代码运行需要在当前目录下创建路径 data/糗事百科爬虫图片与视频数据/ 作为图片和视频存储位置
运行结果如下:
保存数据如下:

糗事百科段子 +图片 + 视频爬虫相关推荐

  1. 爬虫爬取糗事百科段子

    目录 糗事百科段子爬取 爬虫功能介绍 所需软件 网页解析 找到所需信息所在代码段 获取信息 编程思路分析 获取当前所有段子 对提取的内容进行优化 数据合并 查看点赞数最多的内容 总结 最后 附代码 糗 ...

  2. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  3. Python爬虫实战之爬取糗事百科段子

    Python爬虫实战之爬取糗事百科段子 完整代码地址:Python爬虫实战之爬取糗事百科段子 程序代码详解: Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子.包含的信息 ...

  4. Python爬虫实战一之爬取糗事百科段子

    点我进入原文 另外, 中间遇到两个问题: 1. ascii codec can't decode byte 0xe8 in position 0:ordinal not in range(128) 解 ...

  5. Python3写爬虫(五)爬取糗事百科段子

    2019独角兽企业重金招聘Python工程师标准>>> 最近几天开始用Python3改写网上用Python2写的案例,发现完全可以用Python3来重构Python2的源码.本篇文章 ...

  6. 【Python爬虫系列教程 28-100】小姐姐带你入门爬虫框架Scrapy、 使用Scrapy框架爬取糗事百科段子

    文章目录 Scrapy快速入门 安装和文档: 快速入门: 创建项目: 目录结构介绍: Scrapy框架架构 Scrapy框架介绍: Scrapy框架模块功能: Scrapy Shell 打开Scrap ...

  7. 爬虫实战1:爬取糗事百科段子

    本文主要展示利用python3.7+urllib实现一个简单无需登录爬取糗事百科段子实例. 如何获取网页源代码 对网页源码进行正则分析,爬取段子 对爬取数据进行再次替换&删除处理易于阅读 0. ...

  8. 网络爬虫---爬取糗事百科段子实战

    Python网络爬虫 1.知识要求 掌握python基础语法 熟悉urllib模块知识 熟悉get方法 会使用浏览器伪装技术 如果您对相关知识遗忘了,可以点上面的相关知识链接,熟悉一下. 2.爬取糗事 ...

  9. python爬虫经典段子_Python爬虫-抓取糗事百科段子

    爬虫其实很简单,只要用心,很快就就能掌握这门技术,下面通过实现抓取糗事百科段子,来分析一下为什么爬虫事实上是个非常简单的东西. 本文目标 抓取糗事百科热门段子 实现每按一次回车显示一个段子的发布时间, ...

最新文章

  1. 07- Firmware Update (FWU)
  2. VMware vsphere平台中部署 Oracle RAC(二、NTP配置和SSH信任)
  3. 出国怎么能不出现天价微博?
  4. Jmeter通过CSV Data Set Config参数化
  5. 三星Galaxy S21开启预购:最早1月14日发布 售价约5300元起
  6. MAX31855 热电偶至数字输出转换器
  7. Black Hat USA 2021主议题介绍
  8. 语音识别技术是什么_语音识别技术应用领域介绍
  9. 【python博客爬虫】
  10. 宏观经济学 - 宏观经济的基本指标及其衡量
  11. PERT图之事件、活动、松弛时间、关键路径
  12. ICommand和ITool命令操作地图
  13. Error Cannot find module ‘CUsersAppDataRoamingnpmnode_modules..错误,解决方法
  14. matlab 单边频率谱,频谱图如何把双边谱改成单边谱?
  15. 《AR与VR开发实战》导读
  16. 0315-HttpURLConnection和JASON结合使用(以天气预报为例)
  17. 【visio】六步完成跨职能部门业务流程图
  18. linux查看端口占用终结,Linux查看端口占用
  19. 解密了一封300多年前的信,“透视”书信首次实现
  20. AccuWeather天气预报应用介绍

热门文章

  1. 【ubuntu(Linux)安装Vs code并配置c++编译及cmake多文件编译】
  2. win10卸载 oracle 11g,win10 oracle11g彻底删除并重装教程
  3. 进军智能制造,软通动力的“三板斧”
  4. JPG格式图片怎么弄?分享两种转换图片格式方法
  5. linux 获取文件夹下文件信息,linux下获取文件夹下子文件列表
  6. 惠普主板笔记本Win10系统装Ubuntu18.04.6的过程
  7. 关于今天在写 flex 布局,遇到 for 循环后的失效问题
  8. 有没有办法缓存 https 凭据以推送提交?
  9. Openstack-Murano应用包
  10. 计算两个有序数组的中位数