如何用python爬取小说内容,python爬虫获取小说代码示例
在路上经常发现很多人喜欢带着耳机听小说,同事其实一个耳机可以听一整天的小说。本文利用Python爬虫下载并收听小说《tingchina.com》的音频。有需要可以参考一下。
00-1010标题和章节列表音频地址下载完整代码摘要在路上,我发现很多人喜欢带着耳机听小说。同事居然可以一天一个耳机听小说。边肖表示非常震惊。今天下载并收听Python语言的小说《tingchina.com》的音频。
目录
随便点一本书。这个页面可以使用BeautifulSoup来获取标题和所有单个章节音频的列表。复制浏览器的地址,例如https://www.tingchina.com/yousheng/disp_31086.htm.
frombs4importBeautifulSoup
导入请求
进口
随机输入
进口货
标题={
用户代理“:”Mozilla/5.0(windows nt 10.0;Win64x64)AppleWebKit/537.36(KHTML,like gecko)Chrome/91 . 0 . 4472 . 114 safari/537.36
}
defget_detail_urls(url):
url_list=[]
response=requests.get(url,headers=headers)
response.encoding=gbk
soup=beautiful soup(response . text, lxml )
name=soup . select( . red 12 )[0]. strong . text
ifnotos.path.exists(名称):
os.makedirs(名称)
div _ list=soup . select( div . lista )
foritemindiv_list:
URL _ list . append({ name : item . string, URL : https://www . ting China.com/yousheng/{ } 。格式(item[href])})
returnname,url_list
书名和章节列表
打开单个章节的链接,用章节名称作为元素面板中的搜索词,在底部找到一个脚本,就是音源的地址。
在网络面板中,可以看到音源的url域名与章节列表的域名不同。你拿到下载链接的时候需要注意这一点。
defget_mp3_path(url):
response=requests.get(url,headers=headers)
response.encoding=gbk
soup=beautiful soup(response . text, lxml )
script _ text=soup . select( script )[-1]。线
fileUrl _ search=re . search( fileUrl=(。*?);,脚本_文本,回复。s)
iffileUrl_search:
返回 https://t 3344 . ting China.com fileUrl _ search . group(1)
音频地址
惊喜总是突如其来。把这个https://t3344.tingchina.com/xxxx.mp3放进浏览器,结果是404。
肯定是少了一些关键参数。回到上面的网络仔细观察mp3的网址,发现网址后面有一个关键的关键词。如下图,这个键来自https://img.ti
ngchina.com/play/h5_jsonp.asp?0.5078556568562795的返回值,可以使用正则表达式将 key 取出来。
def get_key(url):url = https://img.tingchina.com/play/h5_jsonp.asp?{}.format(str(random.random()))
headers[referer] = url
response = requests.get(url, headers=headers)
matched = re.search((key=.*?)";, response.text, re.S)
if matched:
temp = matched.group(1)
return temp[len(temp)-42:]
最后的最后在__main__
中将以上的代码串联起来。
if __name__ == "__main__":url = input("请输入浏览器书页的地址:")
dir,url_list = get_detail_urls()
for item in url_list:
audio_url = get_mp3_path(item[url])
key = get_key(item[url])
audio_url = audio_url + ?key= + key
headers[referer] = item[url]
r = requests.get(audio_url, headers=headers,stream=True)
with open(os.path.join(dir, item[name]),ab) as f:
f.write(r.content)
f.flush()
完整代码
from bs4 import BeautifulSoupimport requests
import re
import random
import os
headers = {
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36
}
def get_detail_urls(url):
url_list = []
response = requests.get(url, headers=headers)
response.encoding = gbk
soup = BeautifulSoup(response.text, lxml)
name = soup.select(.red12)[0].strong.text
if not os.path.exists(name):
os.makedirs(name)
div_list = soup.select(div.list a)
for item in div_list:
url_list.append({name: item.string, url: https://www.tingchina.com/yousheng/{}.format(item[href])})
return name, url_list
def get_mp3_path(url):
response = requests.get(url, headers=headers)
response.encoding = gbk
soup = BeautifulSoup(response.text, lxml)
script_text = soup.select(script)[-1].string
fileUrl_search = re.search(fileUrl= "(.*?)";, script_text, re.S)
if fileUrl_search:
return https://t3344.tingchina.com + fileUrl_search.group(1)
def get_key(url):
url = https://img.tingchina.com/play/h5_jsonp.asp?{}.format(str(random.random()))
headers[referer] = url
response = requests.get(url, headers=headers)
matched = re.search((key=.*?)";, response.text, re.S)
if matched:
temp = matched.group(1)
return temp[len(temp)-42:]
if __name__ == "__main__":
url = input("请输入浏览器书页的地址:")
dir,url_list = get_detail_urls()
for item in url_list:
audio_url = get_mp3_path(item[url])
key = get_key(item[url])
audio_url = audio_url + ?key= + key
headers[referer] = item[url]
r = requests.get(audio_url, headers=headers,stream=True)
with open(os.path.join(dir, item[name]),ab) as f:
f.write(r.content)
f.flush()
总结
这个 Python 爬虫比较简单,小编的每个月 30 元的流量都不够用,有了这个小程序在地铁上就可以不用流量听小说了。
以上就是详解如何用Python写个听小说的爬虫的详细内容,更多关于Python爬虫 听小说的资料请关注盛行IT软件开发工作室其它相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。