一开始按照视频上的找了笔趣阁的网站先爬一部小说, 找了<遮天>,但是章节太多,爬起来太慢, 就换了一个几十章的小说.

根据视频里的去写了代码, 在正则表达式哪里出了很大的问题.

from bs4 import BeautifulSoup
import requests
import re

先找到了小说主页的链接地址: url = 'https://www.biquge5.com/3_3004/'

reponse = requests.get(url)
reponse.encoding = 'gbk'

html = reponse.text

这是网页的部分代码

<div id="list"><ul class="_chapter">
<li><a href="https://www.biquge5.com/3_3004/
1391919.html">第一章 你心里没点数吗</a></li><li><a href="https://www.biquge5.com/3_3004/
1391920.html">第二章 原来是一场精心设计</a></li><li><a href="https://www.biquge5.com/3_3004/
1391921.html">第三章 你去死啊</a></li><li><a href="https://www.biquge5.com/3_3004/
1391922.html">第四章 能不能找他借钱</a></li><li><a href="https://www.biquge5.com/3_3004/
1391923.html">第五章 你一点都不心痛吗</a></li><li><a href="https://www.biquge5.com/3_3004/
1391924.html">第六章 在监狱里度过后半生</a></li><li><a href="https://www.biquge5.com/3_3004/
1391925.html">第七章 我爸妈只生了我一个</a></li><li><a href="https://www.biquge5.com/3_3004/
1391926.html">第八章 一团迷雾</a></li>

写出正则表达式,找到ul标签里面的链接: dl = re.findall(r'<li><a href="(.*?)">(.*?)<', html, re.S)

结果返回了空列表. 又试了几种正则表示,还是错误的. 检查了好久也查不出原因.

最后直接打开浏览器, 在小说首页查看源代码, 复制了href链接到搜索栏里, 出现了 404 !

又回到源代码, 仔细看一下发现href里只有http--3004/有蓝色标记,后面的139.....没有, 于是只复制了前面的http--3004/, 没想到竟然跳转到了小说章节内容.

于是又复制了一遍href里的链接,发现在浏览器搜索框里出现了一个'\n'换行符,把它去点后也可以 正常访问. 看来就是这个'\n'符就是万恶之源了.

修改代码: dl = re.findall(r'<li><a href="https://www.biquge5.com/3_3004/\s(.*?)">(.*?)<' (\s代表可以匹配换行空格等一切字符)

可是还是有问题, 就是在返回的列表里面,链接还是有\n.

干脆就把所有的换行符都换掉好了: html = html.replace('\n','')

至此,问题解决了

代码:

 from bs4 import BeautifulSoup
import requests
import re
url = 'https://www.biquge5.com/3_3004/'
reponse = requests.get(url)
reponse.encoding = 'gbk'
'''soup = BeautifulSoup(reponse.text, 'lxml')
chapter = soup.select('ul._chapter > li > a')
temp=[] #链接
temp2=[] #章节标题''' '''
#用字典
for c in chapter:
temp.append(c.get_text())
temp2.append(c.get('href'))
print(temp2)'''
'''f = open('遮天.txt','w')
for i in temp:
f.write(str(i))
f.write('\n')
print('ok')
f.close()'''
'''f = open('遮天.txt','w')
for c in chapter:
data={
'clink': c.get('href'),
'ctitle': c.get_text()
}
for i in data.values():
f.write(i[1])
print('ok')
exit() tml = reponse.text
html = html.replace('\n','')
dl = re.findall(r'<li><a href="https://www.biquge5.com/3_3004/\s(.*?)">(.*?)<', html, re.S)
#print((chapter_info_list))
for i in dl:
m,n=i
m="https://www.biquge5.com/3_3004/\n%s" % m
print(m,n)
''' html = reponse.text
html = html.replace('\n','')
dl = re.findall(r'<li><a href="https://www.biquge5.com/3_3004/(.*?)">(.*?)<', html, re.S)
for i in dl:
m,n=i
m="https://www.biquge5.com/3_3004/%s" % m #将链接前面的东西加到m上, + 的方式效率低,采用占位符%S代替.
print(m,n)

结果:

最新文章

  1. Masonry介绍与使用实践:快速上手Autolayout
  2. 安装两个tomcat
  3. 使用 v-cloak 防止页面加载时出现 vuejs 的变量名
  4. 【转】MVC中处理Json和JS中处理Json对象
  5. 破解excel密码保护
  6. Linux网络编程系列-套接口选项控制
  7. jQuery Pagination分页插件的使用
  8. 行转列一定要sum
  9. 在Sharepoint 2010中启用Session功能的说明文档
  10. hdu 4998
  11. HDP2.4安装(一):Centos7安装
  12. android 从assets和res中读取文件
  13. 《Apache数据传输加密、证书的制作》——涉及HTTPS协议
  14. Java-Iterator的用法
  15. 源文件名和public 类名
  16. T-SQL 基于列的逻辑表达式 (CASE)
  17. SPOJ GSS1 &amp;&amp; GSS3 (无更新/更新单点,并询问区间最大连续和)
  18. 表单验证 jquery-validation
  19. 学习window系统下的注册表
  20. sqlite效率探测

热门文章

  1. 对象大小对比之Comparable与Comparator
  2. angular2-生命周期钩子函数
  3. IE8按F12开发人员工具不显示
  4. OPENCV VS设置
  5. 每天一个linux命令-id,输出用户的uid、gid
  6. eclipse中copy qualified name使用方式
  7. java带jar包的命令行运行
  8. Browser进程和浏览器内核(Renderer进程)的通信过程
  9. CSS中的EM属性之弹性布局
  10. 通过yum安装最新服务