python写爬虫的弯路
一开始按照视频上的找了笔趣阁的网站先爬一部小说, 找了<遮天>,但是章节太多,爬起来太慢, 就换了一个几十章的小说.
根据视频里的去写了代码, 在正则表达式哪里出了很大的问题.
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写爬虫的弯路的更多相关文章
- python写爬虫时的编码问题解决方案
在使用Python写爬虫的时候,常常会遇到各种令人抓狂的编码错误问题.下面给出一些简单的解决编码错误问题的思路,希望对大家有所帮助. 首先,打开你要爬取的网站,右击查看源码,查看它指定的编码是什么,如 ...
- 怎么用Python写爬虫抓取网页数据
机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...
- Python写爬虫-爬甘农大学校新闻
Python写网络爬虫(一) 关于Python: 学过C. 学过C++. 最后还是学Java来吃饭. 一直在Java的小世界里混迹. 有句话说: "Life is short, you ne ...
- 开发记录_自学Python写爬虫程序爬取csdn个人博客信息
每天刷开csdn的博客,看到一整个页面,其实对我而言,我只想看看访问量有没有上涨而已... 于是萌生了一个想法: 想写一个爬虫程序把csdn博客上边的访问量和评论数都爬下来. 打算通过网络各种搜集资料 ...
- Python写爬虫爬妹子
最近学完Python,写了几个爬虫练练手,网上的教程有很多,但是有的已经不能爬了,主要是网站经常改,可是爬虫还是有通用的思路的,即下载数据.解析数据.保存数据.下面一一来讲. 1.下载数据 首先打 ...
- 《用Python写爬虫》学习笔记(一)
注:纯文本内容,代码独立另写,属于本人学习总结,无任何商业用途,在此分享,如有错误,还望指教. 1.为什么需要爬虫? 答:目前网络API未完全放开,所以需要网络爬虫知识. 2.爬虫的合法性? 答:爬虫 ...
- 用python写爬虫
Python提供了许多Module,通过这些Module,可以很简单的做一些工作.比如,要获得cloga这个词在百度搜索结果页中的排名结果(排名结果+URL),这就是一个很简单的爬虫需求. 首先,要通 ...
- 《用Python写爬虫》学习笔记(二)编写第一个网络爬虫
1.首先,下载网页使用Python的urllib2模块,或者Python HTTP模块request来实现 urllib2会出现问题,解决方法1.重试下载(设置下载次数) 2.设置用户代理 2.其次, ...
- python写爬虫遇到需要解码js一些记录
js在线格式化网站 https://beautifier.io/ Python 执行 JS 代码 NodeJS 安装方式 先解决 JS 环境,这里推荐安装 Node.js ,安装方便,执行效率也高. ...
随机推荐
- 通过学生-课程关系表,熟悉hive语句
通过学生-课程关系表,熟悉hive语句 1.在hive中创建以下三个表. create table student(Sno int,Sname string,Sex string,Sage int, ...
- 梁宇轩 mysql 语句学习一 对表的操作
1.SHOW TABLES; -- 查询库中所有的表 2 .CREATE TABLE test(id INT(20) PRIMARY KEY NOT NULL AUTO_INCRE ...
- Jupyter Notebook(iPython)
一.Jupyter Notebook介绍 1.什么是Jupyter Notebook Jupyter Notebook是基于网页的用于交互计算的应用程序.其可被应用于全过编码开发.文档编写.运行代码和 ...
- json中定义数组
我们经常会看到在js中定义普通函数: function f1(a,b){ console.log(a+b); } f1(); 今天我们看一下如何在json里边定义函数并调用: var json = { ...
- Java 重写hashCode() 时为什么要用 31 来计算
在OSChina 中看到了一篇文章<Java 中正确使用 hashCode 和 equals 方法>,看到 hashCode 的方法体内的31比较有意思. 在Stackoverflow上找 ...
- OSGi Bundle
OSGi Framework looks like OS, Bundle looks like program, OS can create a process to run program with ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(12)、自定义方式加载Bundle格式缓存数据
随着ArcGIS 10.3的正式发布,Esri推出了新的紧凑型缓存格式以增强用户的访问体验.新的缓存格式下,Esri将缓存的索引信息.bundlx包含在了缓存的切片文件.bundle中.具体如下图所示 ...
- Protobuf协议的Java应用例子
Protobuf协议,全称:Protocol Buffer 它跟JSON,XML一样,是一个规定好的数据传播格式.不过,它的序列化和反序列化的效率太变态了…… 来看看几张图你就知道它有多变态. Pro ...
- win10安装mxnet cuda9.0-gpu版
类似于上一篇文章 Anaconda3.6 python3.6.5 cuda9.0+ cudnn7.0 安装MXNet 1.设置清华源 conda config --prepend cha ...
- 使用mysql5.7新特性解决前通配符查询性能问题
众所周知,在mysql里的后通配符可以使用索引查找,前通配查询却无法使用到索引,即使是使用到了索引,也是使用了索引全扫描,效率依然不高,再MySQL5.7之前,一直都没有好的办法解决,但是到了MySQ ...
