记第一次写python爬虫--小说

准备

转哔哩哔哩上的一个up主视频作为前期的学习准备
(https://www.bilibili.com/video/av19954075?from=search&seid=851521342585466773)
首先我们要明确我们要用到的库:requests和re,库的导入这里就不多讲解了直接去看就好了
值得一提的是快速锁定pip位置在Scripts用shift+右键即可 转:(https://blog.csdn.net/vily_luky/article/details/82456659)

过程

根据浏览器的运行机制
1.运行DNS客户端
2.浏览器从接收的域名字段中抽取url也就是地址(主机名)
3.DNS客户端向DNS服务器发送查询报文(内含主机名)
4.该DNS最终会收到一份回答报文(内含主机名对应的ip地址 )
5.浏览器通过接收到的IP地址定位HTTP服务器并发起TCP连接
接着上代码

#!/usr/local/bin/python3.7
# encoding: utf-8
import requests
import re
#抓取网页源码
url='https://wap.qishuta.com/Shtml7299.html'
head={'User-Agent':' Mozilla/5.0'} #伪装头
respnse=requests.get(url,head)    #模拟浏览器发送get请求
respnse.encoding="utf-8"    #改变编码格式(不然中文会出现乱码)
html=respnse.text            #接收返回包(也就是源码)
BT=re.findall(r'meta property="og:title" content="(.*?)"',html)[0]    #抓取小说名字
f=open('%s.txt' %BT,'w',encoding='utf-8')    #创建一个文本保存小说
ul=re.findall(r'<div class="list_xm">.*?<div class="info_menu">',html,re.S)[0]    #抓小说目录
infolist=re.findall(r'href="(.*?)">(.*?)<',ul)#抓每一章的url和名字
for infoma in infolist :#循环每一章的url和名字
  curl,ctit=infoma    #定义每章节的url和名字
  curl="https://wap.qishuta.com"+curl    #url补全
  crespon=requests.get(curl) #访问每一章节
  crespon.encoding='utf-8'    #改编码格式
  chtml=crespon.text    #接收章节源码的返回包
  content=re.findall(r'<div id="novelcontent" class="novelcontent"><p>(.*?)<script id="chstnut2">',chtml,re.S) #抓取正文
  content=''.join(content) #将list格式变成str格式
  #数据清洗
  content=content.replace(' ','') 
  content=content.replace('&nbsp;','')
  content=content.replace('<br/>','')
  #永久保存小说,文件写入
  f.write(ctit)
  f.write('\n')
  f.write(content)
  f.write('\n')
  #确认输出
  print(curl)

遇到的问题

1.关于包的导入,有些机子可能会出现错误,这里再补充几种方法 转:(https://www.cnblogs.com/haifeima/p/9799167.html)看三就好了
2.关于代码块内的中文转码:
记得导入 encoding: utf-8
3.关于返回包的中文转码:
有些时候在一些特殊的格式下使用encoding: utf-8是行不通的看这篇博客找到了解决方法 转:https://blog.csdn.net/daimashiren/article/details/90577679
再不行就换网址吧。
4.对于正则表达式的研究也不要放下 转:https://www.runoob.com/python/python-reg-expressions.html
5.在最后的清洗数据的时候有时候会遇到replace方法无法调用,原因是需要转的参数是list不是str
这时候伟大的度娘告诉我 转:https://blog.csdn.net/bufengzj/article/details/90231555
6.加伪装头方法是
在这里插入图片描述用谷歌浏览器加F12找到user-agent,在requests-headers里像文中那样复制下来即可
7.关于正则表达式截取字符串的唯一标识符的找法也是用谷歌浏览器F12看返回的源代码或者直接进入网页ctrl+u 例如id==,class==

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值