编写简易爬虫爬取网络小说

import requests
from bs4 import BeautifulSoup
#盗版小说网站服务器的地址,便于跟每个章节的url拼接,获取完整的url
server='https://www.biqukan8.cc'
#目录页的url
start_url = 'https://www.biqukan8.cc/38_38836/'
#自定义请求头的信息,自己电脑浏览器的版本,作为参数传到get里面去,将自己的爬虫进行伪装
headers = {'User-Agent':
               'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36 Edg/111.0.1661.44'
           }
#定义完全局变量后,像服务器发起请求,如果请求成功,将会返回当前页面的所有内容,这个内容通常是html文件。
r = requests.get(start_url, headers=headers)

#encoding可选参数,编码格式,返回自己可以看懂的文本,因为可能会出现乱码
r.encoding='gbk'

#将字符串赋值给新的变量
html=r.text
#因为BS4在解析数据的时候是需要依赖一定的解析器,所以我们需要解析器lxml
bs = BeautifulSoup(html,features='lxml')

#find_all查看bs这个对象里面的所有div标签,这个标签的名字必须是listmain。
# 属性定位。BS4规定如果遇到要查询class的情况,使用class_代替
texts = bs.find_all('div', class_='listmain')

#两次筛选,1.缩小范围,2,再基础上提取里面的内容,然后赋值给全新的变量bs1
bs1 = BeautifulSoup(str(texts[0]),features='lxml')
#find_all()该方法返回的是指定标签下面的所有内容,而且是列表的形式;传入的方式是多种多样的。
# 这里是传入单个指定的标签,要求返回a标签的全部内容
texts1 = bs1.find_all('a')
#因为会有重复,重复12个章节,所以从13开始。得到子列表texts2
texts2=texts1[12:]

#print(filename+"开始爬取")
for i in texts2:

    # i.string查看元素i中的字符串,i.get('href')查看元素i中的href,并且跟服务器server进行拼接
    print(i.string,server+i.get('href'))

    # url=连接服务器地址server+元素i中的href,
    url = server + i.get('href')

    # 传入到爬取单章的url里面
    r1 = requests.get(url, headers=headers)

    #replace进行换行,并且替换。做爬取内容的清理,清理不要的符号和格式
    html1 = r1.text.replace('<br />', '\n')

    #处理后的html1;指定解析器lxml
    bs2 = BeautifulSoup(html1, features='lxml')
    #传入两个指定的标签。
    # 第一个是div,find_all查看bs这个对象里面的所有div标签
    #第二个标签
    #属性定位。BS4规定如果遇到要查询class的情况,使用class_代替.
    texts3 = bs2.find_all('div', class_='showtxt')
#print(texts3[0].text)
    #获取元素i中的字符串,并且将这个值赋给chapte_headings
    chapter_headings=i.string

    #爬取的目录页
    chapter_contents=texts3[0].text

    # file—name文件名字,mode:打开模式,r:只读模式,buffering:缓冲,提高cpu使用效率,encoding:可选参数,编码格式
    filename=open('沧元图.txt', mode='a', buffering=-1, encoding='utf-8')

    #爬完一个目录就换行
    filename.write(chapter_headings+'\n')
    #写入对应文件
    filename.write(chapter_contents)
    #关闭文件
    filename.close()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.凌航

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值