Python爬虫之urllib模块1

本文来自网友投稿。作者PG,一个待毕业待就业二流大学生。玄魂工作室未对该文章内容做任何改变。

因为本人一直对推理悬疑比较感兴趣,所以这次爬取的网站也是平时看一些悬疑故事的网站,同时也是因为这个网站在编码上面和一些大网站的博客不同,并不那么规范,所以对于初学者还是有一定的挑战性的。我打算把这个爬虫分三次讲,所以每次都先完成一个小目标(当然不是一个亿啦),这次课我们先爬取当前页面的并且下载第一篇文章。第二次课我们就将爬取当前页面的=所有的链接进行下载,第三次课我们将把整个板块的文章都下载下来。

演示系统用的是kali,因为懒得去配置各种py模块了,就利用系统已经配置好的,浏览器是firefox,使用的IDE是微软的vscode

首先我们选取了我们要爬取的网站http://tuilixue.com/,先检查一下robots.txt看看是否存在有一些反爬虫的信息

很好,这里没有什么限制

然后我们到我平时比较常去的板块看看,http://tuilixue.com/zhentantuilizhishi/list_4_1.html我们现在想要爬取的文章就是这样的

右击鼠标查看源代码,我们可以看到,我们想要爬取的链接就是这样的

来一张清晰的

但是我们要怎么办才能使python得到这个网页的源代码呢

我们可以使用python的urllib模块提供的open方法,首先我们先新建一个py文件,惯例

#-*-coding:utf8-*-

#!usr/bin/python

因为是linux系统,所以python路径不同于windows,第一行代码说明是用的uft-8进行编码

在这里我们要先导入urllib这个模块,使用import导入

这里其实是两个方法,一个open一个read,open用于从网站上获取网页代码,read是为了读出来好打印

我们可以得到上面结果,但是我们发现字符似乎成了乱码,为了找到原因,我们再来看看源码

我们似乎找到了原因,网页使用的是gb2312进行编码的,但是我们是使用utf-8的,所以导致的乱码,对这方面不解的同学可以去找一些编码的知识看看。下面我们用一个编码转换来尝试获取正确的编码

大家这时可以看到,我们通过强制的编码将获取的网页重新通过gb2312进行编码,我们就可以看到正确的字符了,但是在我们的这次课中并不需要这样的转码,这里只是为了显示获取的是正确的网页,从图中看到,我们获取的正是我们需要进行爬取的页面。

下一步,我们需要获取我们本页的所有的文章链接了,这里需要有一点html和css的知识,关于这部分的知识,大家自己去掌握就行了,不需要太深入。如图中显示的,href后面的就是我们在本次课中需要爬取的链接,每页都有10篇文章是我们需要爬取的,我们先从第一篇的链接开始。

这时候我们就要想我们应该怎么样去获取到这个页面的链接了,如果正则表达式好的同学应该是想到了采取正则表达式进行获取,但是这里有一个问题,一个html页面中有如此多的a开头的元素,也有如此多的href开头的元素,想要通过正则去定位还是有点难的,就算定位出来,也是一大堆的代码,这就不利于可读性了。这时我们应该再从html文本中去分析。我们使用type函数进行类型的判断。

通过对pageContent的类型分析,我们知道这是一个字符串类型

这样我们就可以使用字符串中的find函数了,我们需要对find函数有一个了解

函数中说明了从字符串中寻找目标字符,返回找到的第一个下标,如果没有找到就返回-1,同时可以设置开始寻找的位置和结束的位置。

我们再看到文本

我们发现是在div class=“liszw”下的li元素中的a元素中含有我们需要的链接,这时我们一个个来分析。

Li不能作为我们的选择了

a也不行

这个数量就比较接近了,我再看看前后文的规律发现/span><a似乎是符合我们的要求的

这时我们发现这和我们所要爬取的链接数量上是完全吻合的。我们就来试试。

这里我们采取了一个切片操作,这时我们发现链接其实已经爬取到了,但是还是有些不完美,我们再来完善一下他。

我们来对比一下我们的网页上的第一个链接

这样我们就成功的爬取了第一个链接,现在我们来准备下载第一篇文章。从前面我们可以知道,我们可以把网页通过python的urllib模块下载下来,那么同样的道理,我一样也可以通过urllib模块对文章进行下载。我们通过链接的最后一串数字对下载下来的文件进行命名。并在下载玩后打印end进行提示。

我们可以看到,路径下是没有文件的。现在我们开始下载。

从这里看我们的文件应该是下载成功了,我们去文件路径下面看看。

文件下载是成功了,我们来打开看看。这个地方要注意地址栏的链接

这样,我们第一篇的文章就下载成功了。

未完,待续。请持续关注 微信订阅号:玄魂工作室(xuanhun521)

时间: 2024-10-10 14:39:48

Python爬虫之urllib模块1的相关文章

Python爬虫进阶——urllib模块使用案例【淘宝】

很多时候呢,我们都是读取本地HTML文件来进行爬虫练手,但每次都要手打不同的HTML明显耗时耗力: 还有些小伙伴不喜欢F12,偏偏喜欢在Pycharm中查看HTML的源代码: -- 难道每次都只能"复制--新建--粘贴--保存"一条龙服务吗? 不不不,我们还有Python的第三方库--urllib. urllib模块是模拟浏览器去访问URL地址,然后拿到服务器响应回来的数据,也就是整个HTML文件. 代码如下: import urllib.request as ur # urlopen

Python爬虫之urllib模块2

本文来自网友投稿 作者:PG-55,一个待毕业待就业的二流大学生. 看了一下上一节的反馈,有些同学认为这个没什么意义,也有的同学觉得太简单,关于BeautifulSoup和lxml在后续的教程都会有.这里我记录的是我学习和思考的一个过程,我不是编程高手,非常感谢玄魂老师能给我这个机会,在公众号发布这种入门文章. 上一课我们成功的下载了页面的第一篇文章,这一课我们的目标是怎么把第一页的所有文章都下载下来.还是先继续我们上一节课的内容.我们这次爬取的网页还是http://tuilixue.com/z

Python爬虫教程-09-error 模块

Python爬虫教程-09-error模块 今天的主角是error,爬取的时候,很容易出现错,所以我们要在代码里做一些,常见错误的处,关于urllib.error URLError URLError 产生的原因: 1.无网络连接 2.服务器连接失败 3.找不到指定的服务器 4.URLError是OSError的子类 案例v9文件:https://xpwi.github.io/py/py%E7%88%AC%E8%99%AB/py09error.py # 案例v9 # URLError的使用 fro

Python爬虫的Urllib库有哪些高级用法?

本文和大家分享的主要是python爬虫的Urllib库的高级用法相关内容,一起来看看吧,希望对大家学习python有所帮助. 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它 是一段HTML代码,加 JS.CSS,如果把网页比作一个人,那么HTML便是他的骨架,JS便是他的肌肉,CSS便是它的衣服.所以最重要的部分是存在于HTML中的,下面我 们就写个例子来扒一个网页下来. imp

Python爬虫之Urllib库的基本使用

Python爬虫之Urllib库的基本使用 import urllib2 response = urllib2.urlopen("http://www.baidu.com") print response.read() 其实上面的urlopen参数可以传入一个request请求,它其实就是一个Request类的实例,构造时需要传入Url,Data等等的内容.比如上面的两行代码,我们可以这么改写 # -*- coding: utf-8 -*- """ Cre

python爬虫之urllib库

请求库 urllib urllib主要分为几个部分 urllib.request 发送请求urllib.error 处理请求过程中出现的异常urllib.parse 处理urlurllib.robotparser 解析robots.txt -->规定了该网站的爬虫权限 urllib.request方法 data = urllib.request.urlopen(url) #返回response对象 data.read() --->取出网页源代码 (bytes类型,可以通过decode()转成u

python 爬虫 基于requests模块的get请求

需求:爬取搜狗首页的页面数据 import requests # 1.指定url url = 'https://www.sogou.com/' # 2.发起get请求:get方法会返回请求成功的响应对象 response = requests.get(url=url) # 3.获取响应中的数据:text属性作用是可以获取响应对象中字符串形式的页面数据 page_data = response.text # 4.持久化数据 with open("sougou.html","w&

Python 学习之urllib模块---用于发送网络请求,获取数据

1.urllib urllib是Python标准库的一部分,包含urllib.request,urllib.error,urllib.parse,urlli.robotparser四个子模块. (1)urllib.request用法 1)urlopen函数:用于打开一个URL(urlopen返回一个类文件对象,可以像文件一样操作) 例如: import urllib.request web=urllib.request.urlopen('http://www.baidu.com') conten

Python爬虫连载10-Requests模块、Proxy代理

一.Request模块 1.HTTP for Humans,更简洁更友好 2.继承了urllib所有的特征 3.底层使用的是urllib3 4.?开源地址:https://github.com/requests/requests 5.中文文档?:https://requests.readthedocs.io/zh_CN/latest/ 6.先安装这个包:pip install requests 7.get请求 (1)requests.get() (2)requests.request("get&