加入收藏 | 设为首页 | 会员中心 | 我要投稿 百客网 - 百科网 (https://www.baikewang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

小说有广告?我用50行Python爬虫做了一个无广在线小说阅读器

发布时间:2022-09-19 12:51:29 所属栏目:PHP教程 来源:
导读:  前言

  还在为看小说受到广告影响而烦恼吗?不如利用起时间,跟着本文一起入门python爬虫,实现小说自由!

  介绍

  本项目的全部内容包括:

  1.搜索功能实现

  2.根据所选小说爬
  前言
 
  还在为看小说受到广告影响而烦恼吗?不如利用起时间,跟着本文一起入门python爬虫,实现小说自由!
 
  介绍
 
  本项目的全部内容包括:
 
  1.搜索功能实现
 
  2.根据所选小说爬取全部章节列表
 
  3.在线阅读所选章节
 
  正文预配置
 
  在一般的无反爬虫情形下,python请求网页信息的请求头较为简单,只写User-Agent项即可,可在检查中任意请求的请求头中查看
 
  配置代码如下:
 
  def __init__(self):
  self._headers={
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
  "Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.55"
  }
  self._search_url = 'https://www.xbiquwx.la/modules/article/search.php?searchkey='
  self._book_url = 'https://www.xbiquwx.la'
  self.session = requests.session()
  上段代码中使用了session会话机制,可有效提升python的requests访问网站速度
 
  搜索
 
  在小说网站搜索万相之王,检查网络元素
 
  发现其请求的url如上图中所示,其中的searchkey即为搜索文字的url编码
 
  分析网页源码可知,我们所需的书名和链接均位于class属性值为grid的table标签中,使用xpath语法即可提取标签内容和标签属性
 
  综上,这一部分输入书名搜索返回结果的代码如下:
 
  def search(self, name:str):
  if name:
  response = self.session.get(
  url = self._search_url + name,
  headers = self._headers
  )
  html = etree.HTML(response.content.decode())
  self.bookID = html.xpath('//table[@class="grid"]/tr/td[@class="odd"]/a/@href')
  bookNameTag = html.xpath('//table[@class="grid"]/tr/td[@class="odd"]/a')
  self.bookName = [item.text for item in bookNameTag]
  return self.bookName
  获取章节列表
 
  打开任意一本书籍,检查加载书籍章节时的网络访问情况
 
  php代码混淆器_php阅读器_qq空间最近访客查看器php
 
  可以发现请求的地址就是我们上一步中得到的书籍url,进一步证实了想法
 
  qq空间最近访客查看器php_php代码混淆器_php阅读器
 
  在这里我们发现所有章节名称和url信息全部位于网页源码的dd标签中,同上,利用xpath语法提取
 
  这一部分获取章节名字的代码如下:
 
  def chapLists(self, index:int):
  response = self.session.get(
  url = self._book_url + self.bookID[index],
  headers = self._headers
  )
  self.index = index
  html = etree.HTML(response.content.decode())
  self.chapUrls = html.xpath('//div[@class="box_con"]/div[@id="list"]//a/@href')
  self.chapTitles = html.xpath('//div[@class="box_con"]/div[@id="list"]//a/@title')
  self.chapUrls.reverse()
  self.chapTitles.reverse()
  return self.chapTitles
  在线阅读
 
  我们打开任意一章小说php阅读器,审查网络元素
 
  php代码混淆器_qq空间最近访客查看器php_php阅读器
 
  同样可以发现所请求的网站就是上一步中得到的章节地址
 
  php代码混淆器_php阅读器_qq空间最近访客查看器php
 
  在网页源码中我们发现小说正文部分位于id属性为content的div标签中,编写代码提取正文内容:
 
  def read(self, index:int):
  response = self.session.get(
  url = self._book_url + self.bookID[self.index] + self.chapUrls[index],
  headers = self._headers
  )
  code = response.apparent_encoding
  html = etree.HTML(response.content.decode())
  articleRaw = html.xpath('//div[@class="content_read"]//div[@id="content"]')
  a0 = etree.tostring(articleRaw[0],encoding=code).decode(code)
  a2 = a0[32:-29]
  article = "
  "+self.chapTitles[index]+"
  "+'
  '+a2+""
  return article
  到此,我们已经掌握了整个小说阅读的来龙去脉
 
  总结
 
  整个网络小说在线阅读类封装如下:
 
  import requests
  from lxml import etree
  class bqCrawler():
  def __init__(self):
  self._headers={
  php阅读器_php代码混淆器_qq空间最近访客查看器php
 
 
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
  "Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.55"
  }
  self._search_url = 'https://www.xbiquwx.la/modules/article/search.php?searchkey='
  self._book_url = 'https://www.xbiquwx.la'
  self.session = requests.session()
  def search(self, name:str):
  if name:
  response = self.session.get(
  url = self._search_url + name,
  headers = self._headers
  )
  html = etree.HTML(response.content.decode())
  self.bookID = html.xpath('//table[@class="grid"]/tr/td[@class="odd"]/a/@href')
  bookNameTag = html.xpath('//table[@class="grid"]/tr/td[@class="odd"]/a')
  self.bookName = [item.text for item in bookNameTag]
  return self.bookName
  def chapLists(self, index:int):
  response = self.session.get(
  url = self._book_url + self.bookID[index],
  headers = self._headers
  )
  self.index = index
  html = etree.HTML(response.content.decode())
  self.chapUrls = html.xpath('//div[@class="box_con"]/div[@id="list"]//a/@href')
  self.chapTitles = html.xpath('//div[@class="box_con"]/div[@id="list"]//a/@title')
  self.chapUrls.reverse()
  self.chapTitles.reverse()
  return self.chapTitles
  def read(self, index:int):
  response = self.session.get(
  url = self._book_url + self.bookID[self.index] + self.chapUrls[index],
  headers = self._headers
  )
  code = response.apparent_encoding
  html = etree.HTML(response.content.decode())
  articleRaw = html.xpath('//div[@class="content_read"]//div[@id="content"]')
  a0 = etree.tostring(articleRaw[0],encoding=code).decode(code)
  a2 = a0[32:-29]
  article = "
  "+self.chapTitles[index]+"
  "+'
  '+a2+""
  return article
 
 

(编辑:百客网 - 百科网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!