python手记(五):requests写爬虫(一):爬虫简介

人生不易且无趣,一起找点乐子吧。欢迎评论,和文章无关的也可以。

 

 

 

上次将python的图片处理库简单写了下,也就基本处于玩的地步。哈哈,蛮嘲讽的,这次我尝试着写下爬虫,有多深肯定是不敢保证的,毕竟能力有限。但是我会尽量去从原理上把爬虫的东西说明白一些。让大家有个直观的认识,最后能自己写出个简单的定向小爬虫,爬个小说,爬个图片,爬首歌曲什么的。

如果您爬虫能力还不错,那就不用在这几篇文章上浪费时间了。如果您从未接触过爬虫,或者听说过,但从未用过,那希望这几篇文章对您有用,文章肯定不会写的太长,预计在三四篇左右结束。把关于爬虫的一些基本理论和应用尽量去阐述的明白些。

首先,爬虫(spider)。从这个名字上我们就应该能想象出它的作用(以下内容为胡扯),“爬”,毋庸置疑就是动起来,体现的是爬虫的“动态性”,你要自动地“爬”到各个地方,而不是让我人工手动的给你指明方向。“虫”,你能想到什么,阔怕?不是,我想到的是“吃”。想想看,虫子在一棵树上乱爬,爬到哪就啃哪,吞下的东西就是你能得到的数据,而你要做的,就是把你精心“培育”的“spider”放到某棵你想要“吃”的树上,看着它爬到这,爬到哪,这啃啃,那啃啃。

说的有点恶心了是不(笑),我们说回来。爬虫,就是我们写的段代码,我们把它比作一只蜘蛛,那动态性就是它在一只巨大的网上爬动,至于这张网,当然就是我们的互联网,网络间的联通,恰恰也就给予了爬虫“动起来的基础”。

说到这里我们说下url,uniform resource locator。统一资源定位符,什么意思?很好理解,就是告诉你资源放在什么地方,简单理解就是地址。我在另一个系列的文章中有写这个东西,在这里再简单谈下。url我们只要打开网页就已经使用了,当你打开网页的时候,你会看到图片,看到文字,这些东西并不是存在你的计算机上,而是服务器返回给你的。服务器?在哪里?

就是这个,在你的地址栏中的这一串。其实当你打开浏览器,浏览器所做的就是向“www.baidu.com”这个地址,也就是我们说的url发送一个request请求。request当然可以有参数,就比如我们在某些网页需要登录的那种,当点击登录,我们的request请求中就会包含用户名,密码之类的数据参数。一起发送给对方的服务器,对方的服务器接收到request请求,就会对你的请求进行处理,然后返回一个response回应。

也就是说你打开网页看到的东西,就是你请求的服务器,给你返回来的内容。

ok,这里应该解释清楚了,有的小伙伴看到了地址框里的地址前有个http。http是一种协议,传输数据的一种方式,简单理解。因为我也并不熟悉,怕误人子弟。就是说我们通过http协议来传输的数据。

下面一项,我们拿我们的官网做例子。当我们去请求这个地址——https://www.csdn.net/时,浏览器给我们返回的就是:

就是我们的主界面了,那页面是怎么组成的呢?或者说展现在我们面前的这种格式啊,图片啊,布局啊究竟是怎样展现出来的呢。

这里就要说另一种语言HTML,相信玩web开发的朋友就很熟悉了。HyperText Markup Language,超文本标记语言。其实大部分浏览器都提供了查看网页源代码的功能,只需要在网页中单机鼠标右键,选择查看源代码就可以了。

我们查看一下主页的源代码,就是这个。简单说下,我们可以看到他的主要框架就是:

<html>
    <head>
        something
    </head>
    <body>
        something
    </body>
</html>

主要分为两部分head和body。头中的内容是一些说明性东西,这样说可能并不准确。举个例子吧,比如说这个网页的编码格式,网页的title,布局的样式,某些处理方法都可以写在这里面。当然,后面的两项我们一般单一分开,分别写成css,和js文件,这就是我们写网页的三大利器了。css,Cascading Style Sheets层叠样式表,主要就是我们样式布局等,比如页面的排列啊颜色啊什么的。js, java script。js和java的关系就像老婆和老婆饼的关系一样,没啥关系哈。只是个名字而已,js中写的是处理方法,比如我们前面说到登录,当你点击完后,由js脚本进行处理。

记得有种说法,html是骨骼,css是衣服,js是血肉。最后展现在我们面前的就是个活生生的人了。我们再简单来说下html,因为涉及到后面的东西,需要再深入点。我们说了head,其实网页上显示的内容在body中,我们看到的源代码中都是这种结构<></>,这就形成了一对标签,这也是html名字的由来。每对标签之间的内容,就是显示的内容。

我们来看主页源代码这么个例子,我们看到一排排<li></li>标签,其实他和前面的<ul>标签是一套东西,简单理解下他的功能就是一个布局,将一些东西放在一行行的<li>中,我们刚才说,标签内的东西,就是显示的东西,但是我们看到的是另一个标签<a></a>,这个标签又是作甚的呢,超链接。也就是说当你点击这里的时候,他就会跳转到a标签的地址中,a标签有个属性href,由它来指明跳转的目标。两个a标签之间,就是显示在页面上的内容了,我们来看第一个,“最新文章”就是网页的显示内容,他被a标签框住,说明他在网页上是个超链接,可以点击。之外又被li框住,说明是某个列表中的一列。

简而言之,html就是网页上要显示的内容,我们有一堆的标签来标记它们,每种标签的功能不同,从而让他们有我们预期的模样。图片,也就是打了个<img>标签罢了,原理都是一样的。

我们返回到主页,这一串东西,其实就是:

很简单吧。

ok,我们的基础内容就介绍完了,现在进入爬虫的内容。我们写爬虫,就是模拟浏览器的过程,向某个url发送请求,然后得到response,并从中拿到我们需要的东西。原理就是这样。

在写之前,还有一个重要的东西,爬虫嘛,还是要接受一下规定,有人说这叫“盗亦有道”。哈,随意怎样理解吧,大部分网站呢,出于对用户信息安全,公司利益的考虑,有些东西是不允许你去爬的。

在每个网站的根目录下,也就是网站的主页面位置,会有个robots.txt文件,里面告诉你爬虫所应遵守的规定。(你懂我“应”的意思吧。)

我们来看看我们的官网的robots:

在根目录后面输入robots.txt直接请求就可以。

这就是遵守协议了,我们来简单看下,user-agent指明对象。* 当然就是通配符,指所有人啦。Disallow不用解释吧,就是不允许请求,我们看到后面的参数是一些分目录,这些目录都是网站不允许你去爬的,不是技术上的强制,而是法律道德的约束,懂我意思吧。

最后一行有个sitemap,它是给搜索引擎指明什么东西可以被搜索,我们直接去访问他:

看到so many链接,我们选第一个看看吧。

是一篇机器学习算法的文章,那我们就用它来当我们的实验对象好了。

文章题目也说明,我们用到的是requests这个module,不是标准库,在Dos命令行中pip install requests。就可以安装了。接下来我们来看下怎样得到这篇文章的原代码吧。

import requests

'''
url = 'https://www.csdn.net/article/2018-10-15/2826812'
r = requests.get(url)
print(r.status_code)

with open('spider.txt', 'w') as f:
    f.write(r.text)
'''

url = 'https://www.csdn.net/article/2018-10-15/2826812'
try:
    r = requests.get(url)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    print(r.headers)
    with open('spider.txt', 'w') as f:
        f.write(r.text)
except:
    print('失败')

首先导入就不用说了,requests的get方法向指定地址发送请求。requests的主要方法有七个,其实就一个requests.request()方法,其他的都是request方法延伸出来的。我们这里只用最简单的get。发送请求后会返回response对象,对象的.status_code()方法可以查看状态码。状态码如果是200,表示正常请求,你就可以继续你的操作,如果不是,那就出错了。最出名的应该就是我们常见的404,是不是瞬间就懂了。

r.encoding 是编码格式,apparent_encoding也是,那有什么区别呢,encoding是从response中直接获取的,也就是说返回的说明性数据中告诉你charset是什么,而apparent_encoding是程序根据网页的内容分析出来的真实格式。如果response中没告诉你,就会默认ISO-8859-1。

r.text就是返回的文本内容了,我们把它保存在txt中。上下的代码功能是一样的,下面的更规矩写,只是多了raise_for_statue()方法,这个方法在状态码不是200的时候会抛出异常。就是这点区别,期间输出了headers,顺便让我们看下里面都有什么:

第二行有个charset=utf-8,这个就是encoding了。

我们看下执行结果吧:

源代码得到了,为什么不在控制台直接输出,而是写入文件呢?因为数据过多,直接显示会卡掉。

我们得到了全部的源代码,但这并不是我们想要的,我们其实想要这部分:

大约在270行左右的文章内容,不要其他的。其实r.text得到的是string类型,之后的完全可以用字符串去处理出你想要的数据。

这个例子简单些,因为要的数据都集中在一个地方,如果我想得到网页中的全部url呢?这些东西可不是集中的,全部分散在不同地方,我要一个个找吗。当然不用,这个我们放在下篇讲,怎样处理我们得到的网页数据,需要另一个库BuautifulSoup,不知道怎么去翻哈,意会吧。

这个例子,可以直接用字符串去处理哈,下篇文章我们再来看bs是怎么处理的,你就能体会到它的重要性。

 

再见!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: intitle:python淘宝爬虫 是一个关键词,用于在搜索引擎中搜索与“python淘宝爬虫”相关的网页标题。爬虫是指一种自动化程序,通过网络抓取互联网上的信息。python是一种广泛应用于爬虫开发的编程语言。 淘宝是中国最大的在线购物平台,许多人希望通过爬虫来收集淘宝上的商品信息,用于市场研究、价格比较等目的。因此,使用intitle:python淘宝爬虫进行搜索,可能会找到一些与淘宝爬虫相关的教程、代码示例、工具等资源。 在进行淘宝爬虫时,一般需要使用Python编程语言,并结合一些爬虫框架或库,如BeautifulSoup、Scrapy等。可以利用这些工具来解析网页内容、提取所需的数据,并将其存储或进行进一步的处理。 当然,在进行淘宝爬虫时,需要遵守相应的法律法规和网站的规定,不得以非法或滥用的方式使用爬虫,要确保爬虫行为的合法性和道德性,避免给他人和自己带来不必要的麻烦。 总之,intitle:python淘宝爬虫是一个用于搜索与淘宝爬虫相关资源的关键词,如果你有这方面的需求,可以通过搜索引擎获取相关的资料和工具,并在遵守法律和道德的前提下进行相关的开发和研究。 ### 回答2: 淘宝爬虫是一种用于从淘宝网站上获取数据的程序。当我们在搜索引擎中使用“intitle:python淘宝爬虫”这样的关键词时,意味着我们希望找到与Python的淘宝爬虫相关的内容。 Python是一种功能强大的编程语言,广泛应用于Web开发、数据分析和爬虫等领域。在淘宝爬虫中使用Python可以通过编代码来模拟用户请求,访问淘宝网页并提取所需的数据。爬虫程序可以自动化地搜索和获取淘宝上的商品信息、价格、评价等数据,进而进行数据分析、比较和其他操作。 编一个Python淘宝爬虫需要使用一些库和工具,如requests、beautifulsoup和selenium等。requests库用于发送HTTP请求,并获取网页内容;beautifulsoup则用于解析HTML页面,从中提取出所需的数据;selenium可以模拟用户的操作,自动化地进行页面的点击和切换。 当使用关键词“intitle:python淘宝爬虫”进行搜索时,我们可能会找到与淘宝爬虫相关的教程、示例代码或者一些开源的爬虫项目。这些资源可以帮助我们学习如何使用Python淘宝爬虫,并根据自己的需求进行修改和扩展。 需要注意的是,爬取淘宝网站的数据涉及到一些法律和道德的问题,如侵犯隐私、侵权等。在开发和使用淘宝爬虫时,我们应该遵守相关的法律法规和网站的使用条款,尊重他人的权益和个人隐私。 ### 回答3: intitle:python淘宝爬虫是指在搜索引擎中,使用关键词"intitle"来筛选结果,从而找到与"python淘宝爬虫"相关的网页标题中包含这些关键词的页面。 淘宝爬虫是一种使用Python编程语言开发的网络爬虫程序,用于自动化地从淘宝网站上获取商品信息。淘宝是中国最大的在线购物平台,有着丰富的商品信息和交易数据,通过爬取这些数据可以实现一系列的商业应用。 使用Python淘宝爬虫主要涉及以下几个方面的技术:网络请求、页面解析和数据存储。首先,需要使用Python的网络请求库发送HTTP请求,与淘宝网站建立连接并获取网页内容。接下来,对获取的页面进行解析,使用Python的解析库来提取感兴趣的数据,比如商品的名称、价格、销量等信息。最后,将提取的数据进行存储,可以选择使用数据库或保存为文件的形式。 爬取淘宝数据需要注意一些法律和伦理规范,如尊重网站的robots.txt文件中的规定,不进行恶意爬取和大规模爬取。此外,还应该设置适当的爬取速度和频率,以免给网站带来过大的负担。 总之,intitle:python淘宝爬虫是为了筛选与Python的淘宝爬虫程序相关的网页标题,而淘宝爬虫是一种利用Python编程语言实现的爬虫程序,用于自动化地获取淘宝网站上的商品信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值