前言:
Python越来越流行,跟着时代的进程,我也不用全身心的投入训练,我也来玩玩Python,想着以后工作应该不会有windows的所以我就去安装了Ubuntu 和win10的双系统,这个现在网上到处都是教程我就不细说了,按着教程来就是,百度是个万能的东西,至于pycharm也一样的。
我的配置:Ubuntu16.04+pycharm2018.3(Professional)。
预备知识:
爬虫我的理解:
爬虫(spider)故名思议就是像一个蜘蛛一样在网页上爬来爬去获取我们想要的东西。
爬虫的原理:
这个需要一点的计算机网络的知识啦,当我们浏览网页的时候,我们想访问那个网站就可以在浏览器输入网址就好,用专业术语来解释一下,就是我们的浏览器也就是客服端像网站的服务器发送一个请求,这个过程就叫请求,当服务器收到我们发送的请求的后就把我们访问的数据给们发送过来,这个称之为响应,当然发送的是自己HTML的代码,当我们的浏览器接收到这些响应后就编译HTML代码给我们看,我们要得是这些数据,所以我们用了python的requests的库函数去模拟浏览器就可以收到服务器的数据。
数据的提取:
python最强到的地方就是它有各种各样的库你能想到的库它都有,没有的是你不知道,对于服务器返回的数据有很多是我们不需要的,所以需要我们把有用的数据提取出来,这个用到了正则表达式,Python的re库正则表达式我觉得十分复杂,不过我相信等我们用过很多次后一定会认为这个正则表达式也不过如此,对于不同的网页网页结构不同,我们提取内容的正则表达式也不一样,感兴趣的自己去详细学习一下,在这里为了直接用我们就举个例子:
content=re.findall('<title>(.*?)</title>',html)
这个式子中,htm l表示我们发送请求的后服务器返回给我们的数据(一个很长很大的列表),content表示我们提取后得到的内容,而re.findall()这个函数表示的正是用正则表达式re库中的findall函数去提取内容,最重要的就是这个''<title>(.*?)</title>',其中,<title>为html中的内用,而 (.*?) 则是我们需要提取的内容,其中“.*?”表示任意内容,这个括号表示提取出来,这两个<title>用于定位,整体的的意思就是在html中提取所有两个'<title>'中间的任意内容。
求情访问以及伪装:
Python就是这么方便你想爬虫,只需要需要直接调用库函数就好,我用的是requests库:response=requests.get(url) 其中response就是其响应,包括了所有内容,有的时候需要response.encoding='utf-8' 来确定其编码,然后html=response.text,然后输出html就是在网页上按F12下面出现内容一样的东西啦。我以爬取noel_url='http://www.tianyashuku.com/wuxia/7/'为例,初步代码为:
novl_url='http://www.tianyashuku.com/wuxia/7/'#小说的url
response=requests.get(novl_url)#模拟浏览器进行访问
response.encoding='utf-8'#确定编码规则
html=response.text
print(html)