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

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

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. Java transient和volatile关键字

    关键字Volatile Volatile修饰的成员变量在每次被线程访问时,都强迫从主内存中重读该成员变量的值.而且,当成员变量发生变化时,强迫线程将变化值回写到主内存.这样在任何时刻,两个不同的线程总 ...

  2. Spring课程 Spring入门篇 4-5 Spring bean装配之基于java的容器注解说明--@Bean

    1 解析 2.1 @bean注解定义 2.2 @bean注解的使用 2 代码演练 2.1 @bean的应用不带name 2.2 @bean的应用带name   2.3 @bean注解调用initMet ...

  3. 文章点赞功能(Ajax)

    一.文章点赞样式构建 1.将base.html的css样式改为外部引入 将base.html的内嵌样式删除,改为使用 HTML 头部的 <head> 标签对中使用<link>标 ...

  4. Iscrool下拉刷新

    简易下拉刷新 css样式: *{ margin: 0px; padding: 0px; } #wrapper{ width: 100%; height: 150px; border: 1px soli ...

  5. 数据结构复习之C语言malloc()动态分配内存概述

    #include <stdio.h> #include <malloc.h> int main(void) { ] = {, , , , }; // 计算数组元素个数 ]); ...

  6. Android 自定义ListView滚动条样式

    使用ListView FastScroller,默认滑块和自定义滑块图片的样子: 设置快速滚动属性很容易,只需在布局的xml文件里设置属性即可: <ListView android:id=&qu ...

  7. Android 自定义View实现SegmentControlView(自定义多样式tablayout)

    偷懒一下,不做过多阐述 参考资源: Android 自定义View实现SegmentControlView : https://blog.csdn.net/a512337862/article/det ...

  8. CompletionService的异常处理

    一.采用take()方法时发生异常 示例代码: 情况一:异常比另一个正确任务,较晚出现,正确任务的结果会打印出 import java.util.concurrent.Callable; import ...

  9. ubuntu下go开发环境

    https://qiita.com/necomeshi/items/676ccb669d6e6102117b 安装 https://golang.org/dl/ # 下载&解压 axel -n ...

  10. TP5.0:访问不同模块方法,跳转视图页面

    我们在开发项目时,都会给每个项目加上基本的后台管理页面,并命名为admin 那么,我们在添加admin后台模块后,怎么通过url访问admin后台模块文件代码呢? 1.访问admin模块默认文件的UR ...