python爬虫学习(以爬取小说为例)

爬取网站:https://www.31xiaoshuo.com/168/168168/

代码组成部分:

  1. 获取每一章的url
  2. 在上面获得的url中获取每一章的标题和内容
  3. 将获取到的内容保存到txt文本中

使用的库:

re库
requests库
beautifulsoup库

代码实现:

获取小说每一章的url

使用检查或F12,来查看该网页的页面。
在这里插入图片描述
发现每一章对应的链接地址都是形如

<a href="/168/168168/61321619.html">第一章:剑道</a>

点到具体的某一章,会发现完整的地址如下:

https://www.31xiaoshuo.com/168/168168/61321619.html

其实就是字符串

https://www.31xiaoshuo.com

和在小说主页面内href后面引号内的字符串

/168/168168/61321619.html

连接起来。
我们可以使用正则表达式来将小说主页面内形如

/168/168168/61321619.html

的字符串全部取出来,放在列表中,再与字符串

https://www.31xiaoshuo.com

连接起来,这样就获得了小说每一章完整的url
该部分代码如下

def get_titleurl(text):
    title_list = re.findall("/168.*?html",text)
    title_list1 = []
    for i in title_list:
        title_list1.append("https://www.31xiaoshuo.com/"+i)
    return title_list1
获取每一章的标题和文本内容

在这里插入图片描述

在这里插入图片描述
检查小说第一章的页面,发现小说标题在h1标签内,小说内容在div标签内,id值为content。
获取小说标题和内容的代码如下:

def get_content(url):
    html = requests.get(url)
    soup = BeautifulSoup(html.text, "html.parser")
    title = soup.find('h1').text
    content = soup.find(id="content").text
    return title, content
将获取的文本内容保存到txt文本中
def save(title, content):
    with open('1.txt', mode='a', encoding='utf-8') as f:
        f.write(title)
        f.write(content)

完整代码如下:

import requests
import re
from bs4 import BeautifulSoup

#文件保存函数
def save(title, content):
    with open('1.txt', mode='a', encoding='utf-8') as f:
        f.write(title)
        f.write(content)

#获取每一章的文本内容和标题
def get_content(url):
    html = requests.get(url)
    soup = BeautifulSoup(html.text, "html.parser")
    title = soup.find('h1').text
    content = soup.find(id="content").text
    return title, content

#获取每一章的url链接
def get_titleurl(text):
    title_list = re.findall("/168.*?html",text)
    title_list1 = []
    for i in title_list:
        title_list1.append("https://www.31xiaoshuo.com/"+i)
    return title_list1

url = "https://www.31xiaoshuo.com/168/168168/"
html = requests.get(url)
titleurl = get_titleurl(html.text)
for i in titleurl:
    title, content = get_content(i)
    save(title, content)
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值