下面就给你详细讲解一下“Python requests抓取One推送文字和图片代码实例”的完整攻略。
概述
One是一个很有名的英语学习网站,我们可以从One的每日推送中获取到英语学习素材。本文将介绍如何使用Python的requests模块来获取One的每日推送内容中的文字和图片。
实现过程
- 分析One推送页面
我们需要首先找到One的每日推送页面,访问网站后可以看到网页地址为:http://wufazhuce.com/。在该页面中,每日推送的信息会存放在如下的标签中:
<div class="fp-one-cita">
<div class="fp-one-titulo-pubdate">
<p class="titulo"></p>
<<p class="dom"> </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属性中。
- Python requests模块访问One推送页面
我们可以使用Python的requests模块来访问One每日推送页面,即:
import requests
url = 'http://wufazhuce.com/'
response = requests.get(url)
- 解析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)
- 下载图片
最后,在获取到图片的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技术站