【python杂记】网络爬虫-2/2 实践


前言


前半节把理论知识已经过了一遍,这节将具体实践一下。


一、目标选取与分析

该笔记记录纯学习使用。

选择目标

选择一个网站,将其内容爬取到本地进行保存或者展示。
网站:xx网
随便找的一个小说网站,这里建议大家经济没啥压力尽量多多支持正版啊。毕竟创作不易。

网站分析

网站提供了网络小说txt格式电子书的下载服务。

使用步骤

主要操作步骤如下:

  1. 进入网站,选择一本小说;

  2. 点击后进入小说详情页面,再点击“进入小说下载地址”

  3. 进入下载页面,点击下载地址进行下载。

发现这样类似的网站好几个。感觉是一堆马甲,内容都差不多一样,也许用的同一数据源,说不定也是爬取后再展示的,纯属猜测哈。

流程已经清楚了,主要是三个页面,接下来对页面源码进行分析。

页面源码

在当前网页按下“F12”键可以查看到源码。

  1. 从主页获取下一个详情页面链接:

  2. 从详情页获取下一个下载页面链接

  3. 最后获取下载链接

关于目标的分析就这些,下面能直接撸代码了。

二、代码实现

代码

  1. 导入
import requests
from bs4 import BeautifulSoup
  1. 获取网页html内容, 前面讲提的框架。
def getHTMLText(url: str) -> str:
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()  # 若状态不是200,产生 HTTPError异常
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return "产生异常"
  1. 解析主页获取页面详情url
def parseIndexGetDetail(text: str) -> str:
    soup = BeautifulSoup(text,'html.parser')
    res = soup.select("#container > div.maincontent > div.tclist.fl > ul > li:nth-child(2) > a")
    url = "http://www.---.com/"
    return url + res[0].attrs['href']
  1. 解析页面详情内容获取下载页面url.
def parseDetailGetDownWay(text: str) -> str:
    soup = BeautifulSoup(text, 'html.parser')
    res = soup.select("#container > div.nrcontent > div.down > div > ul > li > p > b > a")
    url = "http://www.---.com/"
    return url + res[0].attrs['href']
  1. 解析下载页面内容获取电子书书名和地址.
def parseDownGetDown(text: str) -> (str, str):
    soup = BeautifulSoup(text, 'html.parser')
    res = soup.select("#mainDownInfo > table .downlist >li")[0].contents[1].contents
    title = res[0].attrs['title'][:-7]
    return title, res[0].attrs['href']
  1. 调用上述函数
def run():
    url_index = "http://www.----.com/"
    text = getHTMLText(url_index)
    url_detail = parseIndexGetDetail(text)
    text = getHTMLText(url_detail)
    url_down_way = parseDetailGetDownWay(text)
    text = getHTMLText(url_down_way)
    title, url_down = parseDownGetDown(text)
    print("书名:", title)
    print("下载地址:", url_down)
  1. main执行
if __name__ == '__main__':
    run()

结果:

书名: 《武侠江湖大冒险》
下载地址: https://down.---.com/d/file/down/2022/02/18/武侠江湖大冒险.txt

代码展望

上面的代码仅实现了前面目标说的要求,相当于完全按照需求来做,没做任何新拓展,但是其实改进和能做的点还非常多,不过用于爬虫入门示例也勉强够。
实践上上面的例子并不怎么好,没有体现爬虫程序的自动化特点,比如大量数据自动爬取。例子中连个for循环都没有,就固定了某一个,当然这些都很容易改进。还有就是能将主页的搜索链接爬取下来使用,相当于可以再做一个壳将数据转发到网站上,爬虫程序做个数据中转站。
例子中用到了bs4的select函数,前面没介绍,可以看这里,多用下,多看看,还是挺简单的。顺便一提,这个select的入参字符串可以如下方式获取(结果不一定都能使用):
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值