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

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

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)

结果:

python写爬虫的弯路的更多相关文章

  1. python写爬虫时的编码问题解决方案

    在使用Python写爬虫的时候,常常会遇到各种令人抓狂的编码错误问题.下面给出一些简单的解决编码错误问题的思路,希望对大家有所帮助. 首先,打开你要爬取的网站,右击查看源码,查看它指定的编码是什么,如 ...

  2. 怎么用Python写爬虫抓取网页数据

    机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...

  3. Python写爬虫-爬甘农大学校新闻

    Python写网络爬虫(一) 关于Python: 学过C. 学过C++. 最后还是学Java来吃饭. 一直在Java的小世界里混迹. 有句话说: "Life is short, you ne ...

  4. 开发记录_自学Python写爬虫程序爬取csdn个人博客信息

    每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...

  5. Python写爬虫爬妹子

    最近学完Python,写了几个爬虫练练手,网上的教程有很多,但是有的已经不能爬了,主要是网站经常改,可是爬虫还是有通用的思路的,即下载数据.解析数据.保存数据.下面一一来讲.   1.下载数据 首先打 ...

  6. 《用Python写爬虫》学习笔记(一)

    注:纯文本内容,代码独立另写,属于本人学习总结,无任何商业用途,在此分享,如有错误,还望指教. 1.为什么需要爬虫? 答:目前网络API未完全放开,所以需要网络爬虫知识. 2.爬虫的合法性? 答:爬虫 ...

  7. 用python写爬虫

    Python提供了许多Module,通过这些Module,可以很简单的做一些工作.比如,要获得cloga这个词在百度搜索结果页中的排名结果(排名结果+URL),这就是一个很简单的爬虫需求. 首先,要通 ...

  8. 《用Python写爬虫》学习笔记(二)编写第一个网络爬虫

    1.首先,下载网页使用Python的urllib2模块,或者Python HTTP模块request来实现 urllib2会出现问题,解决方法1.重试下载(设置下载次数) 2.设置用户代理 2.其次, ...

  9. python写爬虫遇到需要解码js一些记录

    js在线格式化网站 https://beautifier.io/ Python 执行 JS 代码 NodeJS 安装方式 先解决 JS 环境,这里推荐安装 Node.js ,安装方便,执行效率也高. ...

随机推荐

  1. Android设备之间通过Wifi通信

    之前写过PC与Android之间通过WIFI通信(通过Socket,可以在博客里面搜索),PC作为主机,Android作为客户机,现在手头有一台仪器通过wifi传输数据,如果仪器作为主机发射WIFI热 ...

  2. jQuery Custom PopUp Window

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 1.HTML小结

    HTML 基本文档 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  4. css3 转换 过渡 及动画

    转换transform: 通过 CSS3 转换,我们能够对元素进行移动.缩放.转动.拉长或拉伸.您可以使用 2D 或 3D 转换来转换您的元素 2D转换属性: transform 向元素应用 2D 或 ...

  5. Struts1.x 中处理乱码及通过标签显示数据

    1.通过filter解决乱码问题 网页的请求到达之前,先要经过filter的处理: 提取数据出现乱码:request.setCharacterEncoding("UTF-8"); ...

  6. 多线程(八)~ThreadLocal、InheritableThreadLocal的使用

    通过前面的学习,我们了解了在多线程+成员变量等情况下会出现线程安全的问题.那么解决线程安全问题除了使用synchronize关键字之外,还有另一种常用的解决思路,那就是使用ThreadLocal类,下 ...

  7. MySQL Database on Azure 支持 5.7 版本啦!

    MySQL Database on Azure 目前已经全面开放对 5.7 的支持.您可以通过管理门户,在 MySQL 数据库服务器创建时选择 5.7 版本进行体验.MySQL 5.7 版本目前是 M ...

  8. 两种计算Java对象大小的方法

    之前想研究一下unsafe类,碰巧在网上看到了这篇文章,觉得写得很好,就转载过来.原文出处是: http://blog.csdn.net/iter_zc/article/details/4182271 ...

  9. day6-基础 模块详解

    1.定义: 1)模块:本质上就是一个python程序,封装成一个"模块",可以调用里面的方法,用来实现一个功能.逻辑上用来组织python代码. 2)包:本质上是一个目录(必须带有 ...

  10. 2.Zabbix 3.0 部署

    请查看我的有道云笔记地址: http://note.youdao.com/noteshare?id=0db90549f9f347faf928b781087b28c9&sub=AAA6CE2FA ...