Python爬虫入门(适合初学者)

Posted 一顿魏不饱&杏任小饼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫入门(适合初学者)相关的知识,希望对你有一定的参考价值。

Python爬虫入门(一) (适合初学者)

关于爬虫是什么,怎样保证爬虫的合法性小编在这就不再过多的阐述,从本章起,小编将和大家一起分享在学习python爬虫中的所学,希望可以和大家一起进步,也希望各位可以关注一下我!
首先我们来初步了解下如何使用开发者工具进行抓包。以 https://fanyi.baidu.com/ 为例。在网页界面右键点击检查,或使用CTRL+SHIFT+I打开。

如图打开了开发者工具后我们点击网络得到如上界面。接着按照提示按CTRL+R进行刷新。刷新后如下图所示:

此时我们即可看到我们获取到了很多很多的数据包,但是想要完成一个爬虫程序的第一步就是在这众多的包中,找到正确的API数据接口。通俗点将就是你想要获得一个小球,而这个小球藏在一个小箱子里,而此时有很多很多个小箱子,想要获得小球则需要找出小球究竟藏在哪个箱子里。一般在实际操作中我们只需要使用到上图小编圈出来的两个地方,一个是全部、另一个是Fetch/XHR。在全部中会显示所有请求获取到的包其中包括:网页源码、css、js、图片、ajax等。而在Fetch/XHR中则只能看到ajax请求所获得的数据包。ajax请求一般是对动态数据进行请求,即前端向后端发起请求,动态请求到后端数据库中的数据,并将这些数据展示在前端网页中。(可能会感觉听起来云里雾里,没关系哦,后面根据一个一个的例子可以更好的了解,或者小编以后更新django框架时会细讲ajax请求)

接下来我们进入爬虫的第一个程序(百度翻译的单词爬虫)

在百度翻译中我们可以输入一个单词,然后网页会动态的在界面上给我们展示这个单词的意思,因此我们可以非常非常非常自信的确定,单词意思的数据是通过动态请求得到的,既然说动态请求得到的,那么又可以确定这八成就是一个ajax请求。因此我们选中Fetch/XHR。

根据观察此时看到Fetch/XHR中只有这三个数据包,但点开查看其响应(即返回值)时确发现好像没有我们需要的数据。这个什么呢,不必慌张,因为我们并还没有在左边输入单词的框中输入过单词,于是我们可以在左边随意的输入一个英文单词进行测试:

当我们输入完一个单词后发现,右边又抓到了很包,对这些抓到的包进行分析可以找到如下这个数据包:



由上述三种图可以看出,这个包中就藏着我们想要的数据。通过查看该包的标头可以确定,请求数据的请求URL是:https://fanyi.baidu.com/sug,且发起的请求方式为POST,且根据Content-Type: application/json可以得出请求的返回值为json格式,在payload中可以分析出该POST请求需要携带一个名为kw的参数,参数的值为我们需要查询的单词。这时我们即可以弄清楚该网站查询单词的运行机制了:我们在查询框中输入英文单词,网页前端拿到我们输入的单词,通过ajax请求向https://fanyi.baidu.com/sug发起请求,并将我们输入的英文单词作为表单数据传输给后端,后端根据我们输入的单词在数据库中查询该单词,拿到该单词的意思然后再次返回给前端并展示出来。接下来就进入令人激动的coding代码部分。

代码部分
1、安装requests包(在cmd命令行中输入以下语句进行自动下载安装):
前提需要电脑上已经装有python且配置了环境变量

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests


2、导入requests包并确定url:

import requests
url = 'https://fanyi.baidu.com/sug'

3、进行UA伪装

headers = 
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56'
    

UA伪装:可以理解为将我们的爬虫程序伪装起来,增加请求成功的可能性。

只需在数据包的标头中,拉到最下面,即可以找到这个User-Agent,将其复制下来,像小编一样在python用字典进行封装即可。
4、确定参数,并对数据接口发起请求获得返回结果

data =      #post请求携带的参数
       'kw':'dog'
   
#对目标url发起post请求
response = requests.post(url=url,headers=headers,data=data).json()
print(response)

结果如下:

至此一个最最最简单的爬虫程序就写完了,是不是很简单!接下来我们对程序进行完善,所有代码如下:

import requests

def spider(url,headers,data):

    response = requests.post(url=url, headers=headers, data=data).json()  # 对目标url发起post请求
    for key in response['data'][0]:
        print(key,response['data'][0][key])

def main():

    url = 'https://fanyi.baidu.com/sug'  #需要请求的url
    headers =   #进行UA伪装
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36 Edg/98.0.1108.56'
    
    while True:  #使程序进入死循环
        kw = input("输入需要查询的单词:")
        data =      #post请求携带的参数
            'kw':kw
        
        spider(url=url,headers=headers,data=data)  #调用自定义函数spider

if __name__ == '__main__':

    main()


这样一个简单的基于爬虫的单词查询器就完成啦!其中对json数据进行提取的代码如果有看不懂的小伙伴可以去学习一个python的字典。
希望该文章可以帮助到你!如果觉得有用可以关注一下我哦!后序会写更多的例子。

爬虫入门实战,知乎小爬虫

相比于爬虫框架,知乎小爬虫,更加适合初学者,尤其是想要了解爬虫技术细节、实现自己编写爬虫需求的初学者。

1. 谈爬虫工程师的价值

       大数据时代已到,数据越来越具有价值了,没有数据寸步难行,有了数据好好利用,可以在诸多领域干很多事,比如很火的互联网金融。从互联网上爬来自己想要的数据,是数据的一个重要来源,而且往往是必不可少的来源。所有,目前,爬虫工程师是一个非常吃香的职位,工资往往都不低,就是要耐得住寂寞了。那爬虫工程师的价值也就是能稳定的、高效的和实时的带来数据。这里推荐看两篇文章:

http://www.hzzx.gov.cn/cshz/content/2014-08/25/content_5417124.htm

http://www.tuicool.com/articles/Fb6fy2f

2. 爬虫(或互联网数据采集)怎么入门

       爬虫可以很快的入门,但要做的真正大神,还必须不断实践。因为,一旦真正爬数据的时候就会出现各种问题,因为爬虫本质是一种对抗性的工作,你需要和反爬人员斗智斗勇。不过,这个过程会充满无穷的乐趣,还会把你锤炼成真正的爬虫高手。

3. 专门为爬虫入门而写的知乎爬虫

         这里,耗费了不少的业余时间,专门为爬虫入门或初中级写了一个知乎爬虫。为什么选择知乎呢?应为这里例子可以尽量多的将爬虫涉及的技术点包含进去,同时又不至于那么复杂,学习和提升兼顾。下面说明知乎爬虫的源码和涉及主要技术点:

(1)程序package组织

技术分享
                      包结构

(2)模拟登录(爬虫主要技术点1

       要爬去需要登录的网站数据,模拟登录是必要可少的一步,而且往往是难点。知乎爬虫的模拟登录可以做一个很好的案例。要实现一个网站的模拟登录,需要两大步骤是:(1)对登录的请求过程进行分析,找到登录的关键请求和步骤,分析工具可以有IE自带(快捷键F12)、Fiddler、HttpWatcher;(2)编写代码模拟登录的过程。

技术分享
                                                   模拟登录

(3)网页下载(爬虫主要技术点2

      模拟登录后,便可下载目标网页html了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。

技术分享
                                                 连接线程池
技术分享
                                      Get和post方法封装
技术分享
                                               下载网页

(4)自动获取网页编码(爬虫主要技术点3

       自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。

技术分享
                                           正确编码网页

(5)网页解析和提取(爬虫主要技术点4

       使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。

技术分享
                                利用Jsoup进行网页内容解析和提取

(6)正则匹配与提取(爬虫主要技术点5

       虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装了正则匹配与提取数据的方法,因为正则还可以做其他的事情,如在知乎爬虫中使用正则来进行url地址的过滤和判断。

技术分享
                                               封装正则

(7)数据去重(爬虫主要技术点6

       对于爬虫,根据场景不同,可以有不同的去重方案。(1)少量数据,比如几万或者十几万条的情况,使用Map或Set便可;(2)中量数据,比如几百万或者上千万,使用BloomFilter(著名的布隆过滤器)可以解决;(3)大量数据,上亿或者几十亿,Redis可以解决。知乎爬虫给出了BloomFilter的实现,但是采用的Redis进行去重。

技术分享
                                           bloomfilter去重
技术分享
                                                redis去重

(8)设计模式等Java高级编程实践

       除了以上爬虫主要的技术点之外,知乎爬虫的实现还涉及多种设计模式,主要有链模式、单例模式、组合模式等,同时还使用了Java反射。除了学习爬虫技术,这对学习设计模式和Java反射机制也是一个不错的案例。

4. 一些抓取结果展示

技术分享

5. 获取源码

请加QQ:2091395524,并说明为“爬虫”,加好友交流。由于耗费了不少精力,获取源码需要赞助50元小费。说明:源码有较全的注释,简单易懂,使您能快速入门并掌握和立即爬虫的主要技术点,从而独立写自己的爬虫。

以上是关于Python爬虫入门(适合初学者)的主要内容,如果未能解决你的问题,请参考以下文章

爬虫python入门难学吗?

Python爬虫入门教程:超级简单的Python爬虫教程

大佬带你1小时入门 Python 爬虫

如何编写python脚本?教你做简单的爬虫,适合初学者

爬虫入门实战,知乎小爬虫

小白如何入门 Python 爬虫?