搭建爬虫架构

目录

    • 爬虫基本思路
    • 补充urllib
      • 获取get请求
      • 可能遇到的问题
      • 使用post方法
      • 延时处理
      • 响应状态和头
      • 打印状态码
      • 打印头部信息
      • 可以只选择打印某一信息
      • 访问豆瓣
      • get方法
      • post方法

爬虫基本思路

第一步:爬取网页
第二步:解析数据
第三步:保存数据
具体操作:
第一步:在获取网页的时候,我们要有一个baseurl作为访问对象。
baseurl = “网页地址”
datalist = getData(baseurl)
第三步:保存数据
需要有保存路径savapath
savepath = “.\存储位置.xls” 加.表示存储在当前目录下,xls表示excel存储
saveData(savepath)
定义getData函数:
def getData(baseurl)
datalist = [] 将数据存入列表中
在getData函数中进行第二步:
进行逐一处理数据
然后将数据返回给datalist
定义saveData函数:
def saveData(savepath):
编写函数体
if name == “main”: 程序入口
搭建爬虫架构_第1张图片

补充urllib

在当前项目中新建一个文件夹,在文件夹下新建一个test文件用来测试urllib。

获取get请求

在打开网页链接的时候,要用到urllib.request.urlopen()方法,括号中填入要打开的网址。
对访问的网页,可以用一个变量进行接收,可以直接将接收到的结果打印出来。
搭建爬虫架构_第2张图片
在打印的时候,要加上decode(“utf-8”)避免出现乱码等错误。
得到的结果有很多,我们可以把他复制粘贴到一个新的文件中。
在桌面新建一个txt文件,将程序执行的内容复制到文件中去,将文件的格式改为html格式,此时是一个网页。将网页选择用浏览器打开会看到一个百度的界面。
搭建爬虫架构_第3张图片

可能遇到的问题

搭建爬虫架构_第4张图片

在这里由于网页中有汉字等,可能会出现乱码,所以要使用utf-8的编码格式,在txt文件另存为时,可以修改格式,改成utf-8在打开就发现乱码已经改好了。

使用post方法

使用post方法需要有内容进行传输,所以还需要用到urllib.parse解析器。
这里可以使用http://httpbin.org/网站进行测试,在网站中提供了很多的测试内容。
搭建爬虫架构_第5张图片
点开post,点击Try it out按钮,然后再点击Execute按钮即可。
在这里插入图片描述
下面都是响应信息
搭建爬虫架构_第6张图片
复制这个网页的url,对他进行访问,在程序中仍然使用urllib.request.urlopen()方法进行打开,但是这时直接访问是不可以的,会出现错误,METHOD NOT ALLOWED
解决方法是:需要给post传入data。
data时用一个字典封装,要用bytes(urllib.parse.urlencode(),ecodeing=“utf-8”)进行解析,传入二进制。
再次运行,程序框中显示的内容就和网页中显示的内容相同,表示我们成功的进行访问了。
搭建爬虫架构_第7张图片

延时处理

在程序访问网页的时候,有可能会存在访问超时的情况,但是我们不能一直等待,需要继续访问,这时可以进行一个异常捕获,当访问超时的时候,能将超时异常进行捕获。
对页面访问的时间改成0.01秒响应,程序肯定响应不完,所以会报错。
搭建爬虫架构_第8张图片
这时进行异常捕获,将错误类型进行记录,在捕获到这个异常的时候,继续执行。
搭建爬虫架构_第9张图片

响应状态和头

打印状态码

在返回状态码的时候,直接打印response.status,结果打印200表示正常响应。
搭建爬虫架构_第10张图片

打印头部信息

选择打印response.getheaders()
搭建爬虫架构_第11张图片
这个打印结果可以与网页中的信息进行比对,打开百度网页,按住Fn+F12,右侧会显示界面。
搭建爬虫架构_第12张图片
选择Network,刷新一下界面,将页面中的小红点点暗,表示停止记录信息。这时选择最开始的线段点击,会出现baidu.com,进行点击就会出现信息。
搭建爬虫架构_第13张图片
下拉信息,在Headers中可以找到程序框所显示的所有信息,说明程序框返回的就是这里。

可以只选择打印某一信息

将getheaders()改成getheader()注意去掉s,然后在括号中输入想要查找的内容即可。
搭建爬虫架构_第14张图片

访问豆瓣

当我们直接进行访问的时候,通过测试可以看到我们的身份就是Python,没有任何伪装。
搭建爬虫架构_第15张图片
这样在访问豆瓣的时候,会被查出是在爬虫而报错,人家直接知道我们的身份。
搭建爬虫架构_第16张图片
解决办法就是进行伪装。
在我们用浏览器访问网页的时候,会有浏览器的身份标识,我们只需要用这个身份进行豆瓣访问,豆瓣就会以为我们是浏览器而允许我们进行访问了。
查身份的方法就是打开豆瓣网,按住Fn+F12打开界面,选择Network进行刷新界面,点击最开始的部分进行信息查看,在Headers里下拉会看到我们的身份信息。
在这里插入图片描述
我们只需要把这里复制,用这个身份去访问就可以了。
在写代码的时候,要改变原来直接打开的方式,而是将要打开的内容复制给req,然后我们打开req即可。

get方法

req = urllib.request.Request(url=网址,headers=头部信息)
用url存储网址,headers存储刚才得到的身份信息传给req即可。
但是存储headers时要用字典键值对的形式。
然后再用urlopen(req)进行访问就可以了
搭建爬虫架构_第17张图片

post方法

post方法一定要传入data的,所以post方法会比get多传入信息。
data还是需要用parse进行解析。
在赋值req时,需要有(url=,headers=,data=,method=“POST”)
url仍然是网址,headers存储头部信息(字典键值对形式)
data=bytes(urllib.parse.urlencode())进行赋值。
然后打开就用urlopen(req)
搭建爬虫架构_第18张图片
如果访问的是http://httpbin.org测试网站,会发现我们打印输出的结果和网页中显示的结果一样,说明我们成功了。

你可能感兴趣的:(爬虫,架构,python)