如何用python爬取小说内容,python爬虫获取小说代码示例

  如何用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 BeautifulSoup

  import 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: