vlambda博客
学习文章列表

使用爬虫技术揭秘盗版书城背后的秘密

使用爬虫技术揭秘盗版书城背后的秘密

  继上次python爬取视频,之后会陆续会有一些python小例子的文章分享给大家,以及一些爬虫的思路~~


  本次分享的是通过爬虫去爬取小说,话不多说,开工!!!


  我们本次以《斗破苍穹》这本小说为例,有没有看过这部小说的朋友啊~~~


  经过《python爬取视频》这篇文章中,我们可以知道拿到一个网站要进行分析:



  分析浏览器与服务器的请求与响应


  分析网站的源代码


  同样的我们去度娘搜索《斗破苍穹》


使用爬虫技术揭秘盗版书城背后的秘密


  找到一个能看的网站点进去,网站如下:


  http://www.biquku.la/0/425/


使用爬虫技术揭秘盗版书城背后的秘密


使用爬虫技术揭秘盗版书城背后的秘密


  看到这个 "斗之力,三段!" ,有没有勾起你的一丝丝青春, 咳咳咳,跑题了~~~~


  我们本次的目标就是将这本《斗破苍穹》这本书的完整内容爬取下来,冲冲冲



  http://www.biquku.la/0/425/232391.html



  我猜你心里可能会这样想:232391.html 这个232391这个数字会不会代表《斗破苍穹》这本书的编号呢?


  答案是肯定的!!!



  同样的,通过键盘上的F12,打开检查,也可以右键打开,如下


使用爬虫技术揭秘盗版书城背后的秘密


  刷新一下网页


使用爬虫技术揭秘盗版书城背后的秘密


  通过浏览器去访问小说的服务器,得到了这么多的文件,又到了找文件环节,上次是视频,根据老辣的经验知道,视频的常见的文件后缀名是MP4,那现在小说会是什么呢?


  想啊想啊,文字会是撒? txt? World? emmmmmm.......词穷了


  按照这个逻辑去找一下,还是ctrl+F快速查找:


使用爬虫技术揭秘盗版书城背后的秘密


  发现没有,那world有吗?不死心,再去试试


使用爬虫技术揭秘盗版书城背后的秘密


  还是撒都没有,完了完了,还没有一丝头绪,只有最后的网页的源代码没有分析了


  颤抖这双手,打开网页的源代码,心里这要是在没有点线索该咋搞捏?


  通过F12再次打开控制台,如下


使用爬虫技术揭秘盗版书城背后的秘密


  控制台中Elenments中的内容也是网页的源代码,也可以在网页上用右键点击查看网页源代码,也可以用快捷键ctrl+U打开网页源代码


  我们这里用控制台来分析网页源代码,这是为什么呢?因为控制台给我们提供了一些很方便的工具使用~~~主要是图个方便~~~


  我们来熟悉一下这个控制台


使用爬虫技术揭秘盗版书城背后的秘密


  我们通过点击控制台上的鼠标小箭头,然后移动鼠标到上图箭头所指的位置,那么这个箭头是干嘛的呢?这个箭头是用来检索网页上的元素,比如我们现在其实是想要获取到小说的内容,我们就可以看看小说的内容在网页源代码里的位置在哪里


使用爬虫技术揭秘盗版书城背后的秘密


  其实如果ctrl+U也可以直观的发现小说的内容在源代码的位置



  找到内容之后接下来就是想如何把内容给抓取下来了!!!


  

import requests

  import parsel

  from urllib import parse

  # 先爬取一章

  # 请求网址 获取网页数据 html

  def download_one_page(url):

  res = requests.get(url)

  # 乱码解决问题 万能解码

  res.encoding = res.apparent_encoding

  # 字符串 网页html

  # 解析方法 正则表达式 xpath css selector

  sel = parsel.Selector(res.text)

  #每一个章节的名字

  # h1 = sel.css("h1::text")

  # title = h1.get()

  book_title_url = url.split(url.split("/")[-1])[0]

  pes = requests .get(book_title_url)

  pes.encoding = pes.apparent_encoding

  book_title_sel = parsel.Selector(pes.text)

  h1 = book_title_sel.css("h1::text")

  title = h1.get()

  content = sel.css("#content::text")

  # text = ",".join(content.getall())

  # 列表合并为字符串

  lines = content.getall()

  text = ""

  for line in lines:

  text += line.strip() + "\n\n"

  """保存数据"""

  with open(title + ".txt", "a", encoding="utf-8") as f:

  f.write(text)

  def download_one_book(url):

  res = requests.get(url)

  res.encoding = res.apparent_encoding

  sel = parsel.Selector(res.text)

  #获取所有的请求网址

  url_s = sel.css("dd > a::attr(href)").getall()

  # for url in url_s[20:]:

  for url in url_s:

  # 把网址补全

  url = parse.urljoin(res.url, url)

  # download_one_page("http://www.biquku.la/0/425/"+url)

  print(url)

  download_one_page(url)

  # 下载一本小说的方法

  download_one_book("http://www.biquku.la/0/425/")

往期回顾