概念:

使用代码模拟用户,批量发送网络请求,批量获取数据。

分类:

通用爬虫:

通用爬虫是搜索引擎(Baidu、Google、Yahoo等)“抓取系统”的重要组成部分。

主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。

简单来讲就是尽可能的把互联网上的所有的网页下载下来,放到本地服务器里形成备分,

在对这些网页做相关处理(提取关键字、去掉广告),最后提供一个用户检索接口。

聚焦爬虫:

聚焦爬虫是根据指定的需求抓取网络上指定的数据。

例如:获取豆瓣上电影的名称和影评,而不是获取整张页面中所有的数据值。

增量式爬虫:

增量式是用来检测网站数据更新的情况,且可以将网站更新的数据进行爬取。

Robots协议:

robots协议也叫robots.txt(统一小写)是一种存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器(又称网络蜘蛛),此网站中的哪些内容是不应被搜索引擎的漫游器获取的,哪些是可以被漫游器获取的。

因为一些系统中的URL是大小写敏感的,所以robots.txt的文件名应统一为小写。robots.txt应放置于网站的根目录下。
如果想单独定义搜索引擎的漫游器访问子目录时的行为,那么可以将自定的设置合并到根目录下的robots.txt,或者使用robots元数据(Metadata,又称元数据)。
robots协议并不是一个规范,而只是约定俗成的,所以并不能保证网站的隐私。

简单来说,robots决定是否允许爬虫(通用爬虫)抓取某些内容。

注:聚焦爬虫不遵守robots。

eg:

爬取流程:

大多数情况下的需求,我们都会指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是整个页面的数据。

  • 指定url
  • 发起请求
  • 获取响应数据
  • 数据解析
  • 持久化存储

Test:

Test1:

import urllib.request

def load_data():
url = "http://www.baidu.com/"
#GET请求
#http请求
#response:http响应对象
response = urllib.request.urlopen(url)
print(response) load_data()

urllib

Test2:

import urllib.request

def load_data():
url = "http://www.baidu.com/"
#GET请求
#http请求
#response:http响应对象
response = urllib.request.urlopen(url)
print(response)
#读取内容 byte类型
data = response.read()
print(data)
load_data()

读取内容

Test3:

import urllib.request

def load_data():
url = "http://www.baidu.com/"
#GET请求
#http请求
#response:http响应对象
response = urllib.request.urlopen(url)
#print(response)
#读取内容 byte类型
data = response.read()
#print(data)
#将文件获取的内容转换为字符串
str_data = data.decode("UTF-8")
print(str_data)
load_data()

字符串方式读取内容

Test4:

import urllib.request

def load_data():
url = "http://www.baidu.com/"
#GET请求
#http请求
#response:http响应对象
response = urllib.request.urlopen(url)
#print(response)
#读取内容 byte类型
data = response.read()
#print(data)
#将文件获取的内容转换为字符串
str_data = data.decode("UTF-8")
#print(str_data)
#将数据写入文件
with open("baidu.html", "w", encoding="utf-8") as f:
f.write(str_data)
load_data()

将数据写入文件

注:

出于安全性,https请求的话将无法打开,而http则可以打开。

Test5:

str_name = "baidu"
bytes_name = str_name.encode("utf-8")
print(str_name)

将字符串类型传唤为bytes

注:

python爬取的类型:str,bytes

如果爬取返回的是bytes类型:但写入的时候需要字符串 => decode(“utf-8”);

如果爬取返回的是str类型:但写入的时候需要bytes类型 => encode(“utf-8”).

Test1 ~ Test4代码:

import urllib.request

def load_data():
url = "http://www.baidu.com/"
#GET请求
#http请求
#response:http响应对象
response = urllib.request.urlopen(url)
#print(response)
#读取内容 byte类型
data = response.read()
#print(data)
#将文件获取的内容转换为字符串
str_data = data.decode("UTF-8")
#print(str_data)
#将数据写入文件
with open("baidu.html", "w", encoding="utf-8") as f:
f.write(str_data)
#将字符串类型传唤为bytes
str_name = "baidu"
bytes_name = str_name.encode("utf-8")
print(str_name) load_data()

Test5:

import urllib.request
import urllib.parse
import string def get_method_params():
url = "http://www.baidu.com/?wd="
#拼接字符串(汉字)
name = "爬虫"
final_url = url + name
#print(final_url)
#代码发送了请求
#网址里面包含了汉字;ascii是没有汉字的;URL转义
#使用代码发送网络请求
#将包含汉字的网址进行转义
encode_new_url = urllib.parse.quote(final_url, safe=string.printable)
#response = urllib.request.urlopen(final_url)
print(encode_new_url)
#UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)
#针对报错结合上一条注释的解释:
#python是解释性语言;解释器只支持 ascii 0 - 127,即不支持中文!!! get_method_params()

GET - params

import urllib.request
import urllib.parse
import string def get_method_params():
url = "http://www.baidu.com/?wd="
#拼接字符串(汉字)
name = "爬虫"
final_url = url + name
#print(final_url)
#代码发送了请求
#网址里面包含了汉字;ascii是没有汉字的;URL转义
#将包含汉字的网址进行转义
encode_new_url = urllib.parse.quote(final_url, safe=string.printable)
response = urllib.request.urlopen(encode_new_url)
print(response)
#UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)
#针对报错结合上一条注释的解释:
#python是解释性语言;解释器只支持 ascii 0 - 127,即不支持中文!!! get_method_params()

直接运行

import urllib.request
import urllib.parse
import string def get_method_params():
url = "http://www.baidu.com/?wd="
#拼接字符串(汉字)
name = "爬虫"
final_url = url + name
#print(final_url)
#代码发送了请求
#网址里面包含了汉字;ascii是没有汉字的;URL转义
#将包含汉字的网址进行转义
encode_new_url = urllib.parse.quote(final_url, safe=string.printable)
response = urllib.request.urlopen(encode_new_url)
print(response)
#读取内容
data = response.read().decode()
print(data)
#UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)
#针对报错结合上一条注释的解释:
#python是解释性语言;解释器只支持 ascii 0 - 127,即不支持中文!!! get_method_params()

读取内容

import urllib.request
import urllib.parse
import string def get_method_params():
url = "http://www.baidu.com/?wd="
#拼接字符串(汉字)
name = "爬虫"
final_url = url + name
#print(final_url)
#代码发送了请求
#网址里面包含了汉字;ascii是没有汉字的;URL转义
#将包含汉字的网址进行转义
encode_new_url = urllib.parse.quote(final_url, safe=string.printable)
response = urllib.request.urlopen(encode_new_url)
print(response)
#读取内容
data = response.read().decode()
print(data)
#保存到本地
with open("encode_test.html", "w", encoding="utf-8")as f:
f.write(data)
#UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)
#针对报错结合上一条注释的解释:
#python是解释性语言;解释器只支持 ascii 0 - 127,即不支持中文!!! get_method_params()

保存到本地

参考:

https://www.bilibili.com/video/BV1XZ4y1u7Kv

 

Python爬虫学习笔记(一)的更多相关文章

  1. python爬虫学习笔记(一)——环境配置(windows系统)

    在进行python爬虫学习前,需要进行如下准备工作: python3+pip官方配置 1.Anaconda(推荐,包括python和相关库)   [推荐地址:清华镜像] https://mirrors ...

  2. Python爬虫学习笔记(三)

    Cookies: 以抓取https://www.yaozh.com/为例 Test1(不使用cookies): 代码: import urllib.request # 1.添加URL url = &q ...

  3. python爬虫学习笔记

    爬虫的分类 1.通用爬虫:通用爬虫是搜索引擎(Baidu.Google.Yahoo等)“抓取系统”的重要组成部分.主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份. 简单来讲就是尽可 ...

  4. Python、pip和scrapy的安装——Python爬虫学习笔记1

    Python作为爬虫语言非常受欢迎,近期项目需要,很是学习了一番Python,在此记录学习过程:首先因为是初学,而且当时要求很快速的出demo,所以首先想到的是框架,一番查找选用了Python界大名鼎 ...

  5. 一入爬虫深似海,从此游戏是路人!总结我的python爬虫学习笔记!

    前言 还记得是大学2年级的时候,偶然之间看到了学长在学习python:我就坐在旁边看他敲着代码,感觉很好奇.感觉很酷,从那之后,我就想和学长一样的厉害,就想让学长教我,请他吃了一周的饭,他答应了.从此 ...

  6. Python爬虫学习笔记——豆瓣登陆(一)

    #-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import html5lib import re import ...

  7. Python爬虫学习笔记-1.Urllib库

    urllib 是python内置的基本库,提供了一系列用于操作URL的功能,我们可以通过它来做一个简单的爬虫. 0X01 基本使用 简单的爬取一个页面: import urllib2 request ...

  8. 【Python爬虫学习笔记(3)】Beautiful Soup库相关知识点总结

    1. Beautiful Soup简介     Beautiful Soup是将数据从HTML和XML文件中解析出来的一个python库,它能够提供一种符合习惯的方法去遍历搜索和修改解析树,这将大大减 ...

  9. 【Python爬虫学习笔记(1)】urllib2库相关知识点总结

    1. urllib2的opener和handler概念 1.1 Openers: 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例).正常情况下,我们使 ...

随机推荐

  1. phpstorm ext-json is missing in composer.json

  2. Redis5.0 主从模式和高可用 搭建和测试报告

    Redis 单机模式很简单,相关测试水文看这里 Redis5 压力测试结果反馈报告 必须的,今天接着写水文,写一写现在redis 支持的三种集群,主从模式,哨兵模式,Cluster模式,今天先搞主从模 ...

  3. k8s应用环境

    1.7:k8s应用环境: 1.7.1:dashboard(1.10.1) 部署kubernetes的web管理界面dashboard 参考文档: https://www.jianshu.com/p/4 ...

  4. 6 个例子教你重构 Python 代码

    1. 合并嵌套的 if 条件 太多的嵌套会使代码难以理解,这在 Python 中尤为如此,因为 Python 没有括号来帮助区隔不同的嵌套级别. 阅读深度嵌套的代码容易让人烦躁,因为你必须理清哪些条件 ...

  5. Asp.net Core3.1+Vue 使用SignalR推送数据

    本文就简单使用 往前端页面推送消息 SignalR 是什么 SignalR是一个.NET Core/.NET Framework的开源实时框架. SignalR的可使用Web Socket, Serv ...

  6. 【mybatis-plus】分页、逻辑删除

    通过mybatis-plus实现分页,也是很简单,插件大法. 一.分页 1.配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mapper的路径 @Map ...

  7. 内部类和Lambda

    1.1 内部类的基本使用 在一个类中定义一个类.举例:在一个类A的内部定义一个类B,类B就被称为内部类 内部类定义格式 格式&举例: /* 格式:    class 外部类名{   修饰符 c ...

  8. Ubuntu安装 Sublime Text 及常用插件推荐

    之前一直在用 Code Blocks 这个IDE工具,可用着还是感觉不怎么好,于是在网上找到了一篇文章,上面介绍了不少IDE,我找到了Sublime Text 感觉挺不错的. 帖子地址: http:/ ...

  9. Docker容器安装nginx基本步骤Yum版

    首先我们来科普一下nginx: Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问 ...

  10. linkedhashmap中关于LRU算法的实现

    //LinkedHashMap的一个构造函数,当参数accessOrder为true时,即会按照访问顺序排序,最近访问的放在最前,最早访问的放在后面 public LinkedHashMap(int ...