python requests抓取one推送文字和图片代码实例

yizhihongxing

下面就给你详细讲解一下“Python requests抓取One推送文字和图片代码实例”的完整攻略。

概述

One是一个很有名的英语学习网站,我们可以从One的每日推送中获取到英语学习素材。本文将介绍如何使用Python的requests模块来获取One的每日推送内容中的文字和图片。

实现过程

  1. 分析One推送页面

我们需要首先找到One的每日推送页面,访问网站后可以看到网页地址为:http://wufazhuce.com/。在该页面中,每日推送的信息会存放在如下的标签中:

    <div class="fp-one-cita">
        <div class="fp-one-titulo-pubdate">
            <p class="titulo"></p>
            <<p class="dom">&nbsp;</p>
            <<p class="may"></p>
        </div>
        <div class="fp-one-cita-wrapper">

            <div class="fp-one-cita-day"></div>
            <p class="fp-one-cita-vol"></p>
            <blockquote class="fp-one-cita-contenido">
                <b><a href="http://wufazhuce.com/one/*****" target="_blank">** 每日一句 **</a></b>
                <br>
                ***
                <br><br>
                <a href="http://wufazhuce.com/one/****" target="_blank">--来自「One · 一个」</a>
            </blockquote>
        </div>
    </div>

我们可以将该标签中的文字内容(经过处理后),作为每日推送文字输出;而图片的地址则在该标签之外,通过分析也可以轻松找到其所在的标签:

    <div class="fp-one-imagen">
        <a href="http://wufazhuce.com/one/****" target="_blank">
            <img class="fp-one-imagen-unlazy" src="****" data-src="****" alt="">
        </a>
        <p><strong>ONE · 每日一图 / ***</strong></p>
    </div>

图片的地址位于上述代码的img标签中的data-src属性中。

  1. Python requests模块访问One推送页面

我们可以使用Python的requests模块来访问One每日推送页面,即:

import requests

url = 'http://wufazhuce.com/'
response = requests.get(url)
  1. 解析HTML并获取One推送的文字和图片

我们使用Python的BeautifulSoup4库来解析HTML页面,解析后,使用CSS选择器找到上面所说的文字和图片的标签,进行内容和图片地址的提取。

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, 'html.parser')

# 获取每日推送中的文字
cita_tag = soup.select_one('div.fp-one-cita')
titulo_tag = cita_tag.select_one('p.titulo')
dom_tag = cita_tag.select_one('p.dom')
may_tag = cita_tag.select_one('p.may')
day_tag = cita_tag.select_one('div.fp-one-cita-day')
vol_tag = cita_tag.select_one('p.fp-one-cita-vol')
contenido_tag = cita_tag.select_one('blockquote.fp-one-cita-contenido')
cita = '{} / {} / {}\n\n{}\n\n{}'.format(
    titulo_tag.text, may_tag.text, dom_tag.text, contenido_tag.text,
    day_tag.text + vol_tag.text
)
print(cita)

# 获取每日推送中的图片
img_url = soup.select_one('div.fp-one-imagen img')['data-src']
print(img_url)
  1. 下载图片

最后,在获取到图片的URL后,使用Python下载模块requests下载图片,并保存在本地。

img_response = requests.get(img_url)
with open('one.jpg', 'wb') as f:
    f.write(img_response.content)

示例

以下是一个完整的实例,它将提取One每日推送中的文字和图片,并将图片保存在本地one.jpg文件。

import requests
from bs4 import BeautifulSoup

url = 'http://wufazhuce.com/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')

cita_tag = soup.select_one('div.fp-one-cita')
titulo_tag = cita_tag.select_one('p.titulo')
dom_tag = cita_tag.select_one('p.dom')
may_tag = cita_tag.select_one('p.may')
day_tag = cita_tag.select_one('div.fp-one-cita-day')
vol_tag = cita_tag.select_one('p.fp-one-cita-vol')
contenido_tag = cita_tag.select_one('blockquote.fp-one-cita-contenido')
cita = '{} / {} / {}\n\n{}\n\n{}'.format(
    titulo_tag.text, may_tag.text, dom_tag.text, contenido_tag.text,
    day_tag.text + vol_tag.text
)
print(cita)

img_url = soup.select_one('div.fp-one-imagen img')['data-src']
img_response = requests.get(img_url)
with open('one.jpg', 'wb') as f:
    f.write(img_response.content)

另一种示例,通过传入日期参数来获取特定日期的One每日推送中的文字和图片并下载。

import requests
from bs4 import BeautifulSoup
from datetime import datetime, timedelta

base_url = 'http://wufazhuce.com/one/{}-{}-{}'

def get_one(date):
    url = base_url.format(date.year, date.month, date.day)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    response = requests.get(url, headers=headers)

    soup = BeautifulSoup(response.text, 'html.parser')

    cita_tag = soup.select_one('div.fp-one-cita')
    titulo_tag = cita_tag.select_one('p.titulo')
    dom_tag = cita_tag.select_one('p.dom')
    may_tag = cita_tag.select_one('p.may')
    day_tag = cita_tag.select_one('div.fp-one-cita-day')
    vol_tag = cita_tag.select_one('p.fp-one-cita-vol')
    contenido_tag = cita_tag.select_one('blockquote.fp-one-cita-contenido')
    cita = '{} / {} / {}\n\n{}\n\n{}'.format(
        titulo_tag.text, may_tag.text, dom_tag.text, contenido_tag.text,
        day_tag.text + vol_tag.text
    )
    print(cita)

    img_url = soup.select_one('div.fp-one-imagen img')['data-src']
    img_response = requests.get(img_url)
    with open('one_{}.jpg'.format(date.strftime('%Y-%m-%d')), 'wb') as f:
        f.write(img_response.content)

date = datetime.now() - timedelta(days=1)  # 获取昨天的One推送信息
get_one(date)

以上就是Python requests抓取One推送文字和图片代码实例的详细攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python requests抓取one推送文字和图片代码实例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • python排序算法之归并排序

    让我来详细讲解一下“Python排序算法之归并排序”的完整攻略。 什么是归并排序? 归并排序是一种基于比较的排序算法,在最坏情况下时间复杂度也为 $O(n\log_2n)$。它采用分而治之的思想,将待排序数组分成若干个子数组,逐层合并,最终得到有序的结果。归并排序的核心思想是把一个大问题分解成若干个小的问题解决,直到小问题不可分解,再把所有小问题的结果合并成…

    python 2023年6月5日
    00
  • Python集合的基础操作

    下面是关于Python集合的基础操作的详细攻略,包含两个示例说明。 集合的定义 在Python中,集合是一种无序、不重复的数据类型,使用括号 {} 或 () 函数来定义。下面是示例: # 大括号定义集合 my_set = {1, 2, 3, 4} # 使用 set() 函数定义一个集合 my_set = set([1, 2, 3, 4, 5]) 集合的特点 …

    python 2023年5月13日
    00
  • Python如何使用bokeh包和geojson数据绘制地图

    下面是详细讲解 Python 如何使用 Bokeh 包和 GeoJSON 数据绘制地图的完整攻略。 准备工作 首先需要安装 Bokeh 包和 GeoJSON 包。可以使用 pip 命令进行安装: pip install bokeh pip install geojson 同时还需要一份 GeoJSON 数据,可以在 GeoJSON 数据下载网站 上下载。 绘…

    python 2023年6月3日
    00
  • Python提取PDF发票信息保存Excel文件并制作EXE程序的全过程

    让我来详细讲解一下“Python提取PDF发票信息保存Excel文件并制作EXE程序的全过程”的完整实例教程。 1. 安装Python及相关库 首先,我们需要安装Python及相关的库,这里我们使用Python 3.x版本,推荐使用Anaconda作为Python的集成开发环境。需要安装的相关库主要有以下几个: PyPDF2:用于读取PDF文件; openp…

    python 2023年5月14日
    00
  • Python库urllib与urllib2主要区别分析

    Python库中的urllib和urllib2,是Python在处理URL、HTTP请求和响应过程中所使用的两个库。虽然两个库的名称相似,但它们在实现方式和功能方面有很大的不同。以下为详细介绍。 urllib和urllib2的区别 urllib urllib是python内置的HTTP请求库,可以处理编码解码、操作Cookie、处理代理等功能。 urllib…

    python 2023年6月3日
    00
  • python 实现上传图片并预览的3种方法(推荐)

    针对“python 实现上传图片并预览的3种方法(推荐)”这一主题,我会如下进行详细的讲解。 1. 背景 在网站或应用开发中,常常需要实现文件上传功能,而图片上传是最为常见的场景之一。在上传图片的同时,为方便用户查看、修改或删除等操作,通常需要提供图片预览功能。Python 是一种流行的编程语言,也被广泛应用于Web开发领域中。因此,本文主要介绍 Pytho…

    python 2023年5月18日
    00
  • 浅谈python中str字符串和unicode对象字符串的拼接问题

    为了理解Python中Str字符串和Unicode对象字符串的拼接问题,我们需要先了解它们的区别。 在Python 2.x版本中,Str默认采用ASCII编码,而Unicode对象则支持所有的字符编码方式。在Python中,Str字符串用单引号(’)或双引号(”)来表示,Unicode对象字符串则用u” 或者 U”来表示。 在Python 3.x版本中取消了…

    python 2023年5月31日
    00
  • Python 惰性求值

    Python 惰性求值是一种编程技术,它可以在需要时生成程序序列,而不是在程序开始时生成。这种技术通常可以用于处理大数据集或者无限序列。在 Python 中,可以使用生成器(generator)来实现惰性求值。下面将介绍如何使用 Python 惰性求值。 惰性求值的基本概念 惰性求值又叫做 “延迟求值”(lazy evaluation),它是一种计算模式,只…

    python-answer 2023年3月25日
    00
合作推广
合作推广
分享本页
返回顶部