爬虫第一式:了解使用爬虫

news/2024/7/19 12:44:10 标签: python, 爬虫

哈喽你好,我先在这里废话两句,不想看直接看下面喽。。。。

爬虫

一个惊险而又刺激的东西,但同时也很抽象,说这东西,其实你都用过,但是没人告诉过你,先听我吹完在告诉你什么时候你用过。

爬虫的定义是:网络蜘蛛、网络机器人、抓取网络数据的程序,害,其实说白了就是Python程序模仿人点击浏览器访问网站,而且越逼真越好,这就是爬虫

为啥用Python做爬虫?? 两个字简单,一个字。。。。。。我们还是解决上面的问题吧,就是我说过你用过爬虫,这个问题,其实就是,百度,你没看错,就是百度,为什么说百度是爬虫呢,那我们就简单说吧,你在打开百度搜索东西的时候,爬虫就开始工作了,你搜索完,响应出来的页面,比如这样:
在这里插入图片描述

给出来的页面就是爬虫爬取完的结果,为什么这么说,其实就是当你一点击百度一下的时候,百度就会从网络上爬去到相对应的资源,响应出来,只不过,当你搜出来后,他会看一下他的服务器上有没有,没有就会保存这次搜索的内容,方便下一次的响应,更大大的节约了响应的时间,你要问我那服务器也有满的时候啊,那那那你别管,百度,有钱,奥利给,存就完了,好废话说多了直接上技术。

requests模块

  • 安装
    【1】Linux
        sudo pip3 install requests
    【2】windows
        方法1>    cmd命令行  -->   python -m pip install requests
        方法2>    右键管理员进入cmd命令行 :pip install requests

常用方法

  • requests.get()
python">【1】作用
    向目标网站发起请求,并获取响应对象

【2】参数
    2.1> url :需要抓取的URL地址
    2.2> headers : 请求头
    2.3> timeout : 超时时间,超过时间会抛出异常
python">	"""
	向京东官网(https://www.jd.com/)发请求,获取响应内容
	"""
	import requests     # 导入requests模块
	
	resp = requests.get(url='https://www.jd.com/')   # 使用requests.get()方法,url就是网站地址
	html = resp.text   # 1.text属性: 获取响应内容-字符串
	print(html)
  • 响应对象(res)属性
【1】text        :字符串
【2】content     :字节流
【3】status_code :HTTP响应码
【4】url         :实际数据的URL地址

效果:
在这里插入图片描述
这就是终端响应给我们的东西,看不懂就看不懂吧,你可以理解这个响应内容就是京东首页的HTML页面的代码

好我们接着
出现了一个问题:

  • 网站如何来判定是人类正常访问还是爬虫程序访问?–检查请求头!!!
python"># 请求头(headers)中的 User-Agent
# 测试案例: 向测试网站http://httpbin.org/get发请求,查看请求头(User-Agent)
import requests

url = 'http://httpbin.org/get'
res = requests.get(url=url)
html = res.text
print(html)
# 请求头中:User-Agent为-> python-requests/2.22.0 那第一个被网站干掉的是谁???我们是不是需要发送请求时重构一下User-Agent???添加 headers 参数!!!

在这里插入图片描述
我们看响应出来是什么?–> “User-Agent”: “python-requests/2.23.0”,
我们看响应出来的一旦是这样的话,你完了,这一看就是爬虫请求,网站会立即禁止掉你的IP
也就是当我们在以后的爬取过程中,一定一定一定要设置请求头,否则他就把你IP给禁掉了,也就是正常访问也不允许了

接下来我们解决掉它

  • 重大问题解决 - headers参数
"""
	包装好请求头后,向测试网站发请求,并验证
	养成好习惯,发送请求携带请求头,重构User-Agent
	"""
	import requests
	
	url = 'http://httpbin.org/get'
	headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}
	html = requests.get(url=url,headers=headers).text
	# 在html中确认User-Agent
	print(html)

我们可以去百度一下,就直接搜常见的User-Agent总结
就会出来好多好多,你就随便用一个就行像这样:
在这里插入图片描述
直接复制一个到你设置的这个里面

python">headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}

注意一定要把一条复制全了!!!

爬虫编码模块

  • urllib.parse模块
python">	1、标准库模块:urllib.parse
	2、导入方式:
	import urllib.parse
	from urllib import parse
作用:
	给URL地址中查询参数进行编码
    
	# 示例
	编码前:https://www.baidu.com/s?wd=美女
	编码后:https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3

常用方法

urlencode({ 参数为字典 })

  • 作用
          给URL地址中查询参数进行编码,参数类型为字典
  • 使用方法
python"># 1、URL地址中 一 个查询参数
编码前: params = {'wd':'美女'}
编码中: params = urllib.parse.urlencode(params)
编码后: params结果:  'wd=%E7%BE%8E%E5%A5%B3'
    
# 2、URL地址中 多 个查询参数
编码前: params = {'wd':'美女','pn':'50'}
编码中: params = urllib.parse.urlencode(params)
编码后: params结果: 'wd=%E7%BE%8E%E5%A5%B3&pn=50'
发现编码后会自动对多个查询参数间添加 & 符号

那接下来我们练习一下吧:

python">https://tieba.baidu.com/f?kw=迪丽热巴&pn=50
目标: 拼接迪丽热巴吧前20页的URL地址,从终端打印输出
    1、urllib.parse
    2for循环
    from urllib import parse

params = parse.urlencode({'kw':'迪丽热巴'})
url = 'https://tieba.baidu.com/f?{}&pn={}'
for i in range(20):
    pn = i * 50
    page_url = url.format(params, pn)
    print(page_url)

爬去结果:
在这里插入图片描述
这个url地址是真实有效的啊,可以点进去看一下,哎算了算了,你还是看我文章吧哈哈哈哈哈

现在我们看一下拼接URL地址的三种方式

python"># url = 'http://www.baidu.com/s?'
# params = {'wd':'赵丽颖'}
**********************************
params = urllib.parse.urlencode(params)1】字符串相加
【2】字符串格式化(占位符 %s)
【3format()方法
    'http://www.baidu.com/s?{}'.format(params)
python">练习一下看自己是否掌握了:
	进入瓜子二手车直卖网官网 - 我要买车 - 请使用3种方法拼接前20页的URL地址,从终端打印输出
   	官网地址:https://www.guazi.com/langfang/
  • 我们来总结一下,写一个比较高级的爬虫,实例如下:
python">问题: 在百度中输入要搜索的内容,把响应内容保存到本地文件
编码方法使用  urlencode()

import requests
from urllib import parse

# 1. 拼接URL地址
word = input('请输入搜索关键字:')
params = parse.urlencode({'wd':word})
url = 'http://www.baidu.com/s?{}'.format(params)

# 2. 发请求获取响应内容
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}
html = requests.get(url=url, headers=headers).text

# 3. 保存到本地文件
filename = '{}.html'.format(word)
with open(filename, 'w', encoding='utf-8') as f:
    f.write(html)

响应了之后你应该看到你编辑器左边的文件里多了一个你搜索的东西的名称,点开它,我搜的是赵丽颖啊,我们来看一下:
在这里插入图片描述
我们点开那个名字为赵丽颖.html的文件看:
在这里插入图片描述
别惊讶,不要理解什么都没有,其实他在下面,这个百度,还跟你玩躲猫猫呢,我们往下滚动鼠标,马上就有内容了:
在这里插入图片描述
这个页面是被我们爬下来了,可是我们不可以打开它,因为我们爬去的知识它的html页面,很多别的我们没有爬下来,如果打开的话,我们会看不到完整的页面的,就像这样:
在这里插入图片描述
哎,其实我这个挺好的,只是图片没有显示出来,不知道你们的什么样子,你要是搜的是别的可能会有反扒机制,爬取出来的页面再打开的话,可能根本就不能看,界面还特别丑。

quote(‘参数为字符串’)

  • 使用方法
python">http://www.baidu.com/s?wd=赵丽颖
    
# 对单独的字符串进行编码 - URL地址中的中文字符
word = '美女'
result = urllib.parse.quote(word)
result结果: '%E7%BE%8E%E5%A5%B3'

我们可以把上面的urlencode的百度实例改写一下

python">import requests
from urllib import parse

# 1. 拼接URL地址
word = input('请输入搜索关键字:')
params = parse.quote(word)
url = 'http://www.baidu.com/s?wd={}'.format(params)

# 2. 发请求获取响应内容
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1'}
html = requests.get(url=url, headers=headers).content.decode('utf-8')

# 3. 保存到本地文件
filename = '{}.html'.format(word)
with open(filename, 'w', encoding='utf-8') as f:
    f.write(html)

这样是效果一样的,可以自己运行试试
而这样的方式我们是可以解码的嘿嘿嘿

  • unquote(string)解码
python">	# 将编码后的字符串转为普通的Unicode字符串
	from urllib import parse
	
	params = '%E7%BE%8E%E5%A5%B3'
	result = parse.unquote(params)
	
	result结果: 美女

可以跟上面quote编码的小练习对应一下,其实就是逆推


http://www.niftyadmin.cn/n/835477.html

相关文章

CentOS系列启动流程详解

一、Linux启动内核文件1.Linux系统组成动态视角:内核根文件系统静态视角:磁盘分区相关文件2.Kernel特点(1)支持某块化:.ko (kernel object)文件(2)支持模块运行时动态装载或卸载;总结:Linux kernel在单内核设计模型上&…

django更改数据

2019独角兽企业重金招聘Python工程师标准>>> title request.POST.get(title)simple_introduction request.POST.get(simple_introduction)content request.POST.get(content)content mark_safe(content)type (int)(request.POST.get(types))obj models.Articl…

爬虫第二式:猫眼电影前100排行榜

hello hello,小伙伴们你们好,今天我就正式进入爬虫稍微高级一点的阶段了,哈哈哈哈上一篇才是入门了,本章就进阶了,所以没学好入门的小伙伴们先去我的上一篇文章看懂看明白啊,丢个小链接: 爬虫第…

喜鹊医药获近亿元B轮融资,助力创新药物研究开发

2月13日消息,喜鹊医药”宣布完成B轮融资近亿元人民币,由深圳仙瞳资本管理有限公司独家投资,资金将用于加速公司临床和临床前项目的开发。据悉,这是喜鹊医药自2016、2017年分别完成 A 和 A 轮融资后的新一轮重大融资。 喜鹊医药是…

数据库内部存储结构探索

本文是左耳耗子推荐的Medium上的一篇关于MySQL的文章Some study on database storage internals,本人觉得文章十分好,就取得了作者的许可,自行进行了翻译,原文链接见文末。本文是一篇介绍性的文字,所以文中并没有对一些…

爬虫第三式:某某二手车数据抓取 -二级页面

本章我们就已经彻底跨入高级阶段了,ready? 文章底部有全部代码 接下来我们就带着之前的学习内容,来学习高级阶段了,这次讲的主要内容如下 二级页面爬取、数据持久化MySQL 首先我们先来看一下任务: 【1】爬取地址 某…

MongoDB数据库最精简的使用方式,来看看吧

MongoDB介绍 【1】MongoDB为非关系型数据库,基于key-value方式存储【2】MongoDB基于磁盘存储,而Redis基于内存【3】MongoDB数据类型单一,就是JSON文档MySQL数据类型:数值类型、字符类型、枚举类型、日期时间类型Redis数据类型:字符串、列表、哈希、集合、有序集合MongoDB数据类…

centos7安装及网络配置

vi/etc/sysconfi/network-scripts/ifcfg-ens33 编辑网络配置文件 编辑完成重启systemctl restart network.service 重启网卡然后 ping 外网 看下网络是否正常 如果无法访问外网可以使用ip route 这个命令查看网关和IPcentos7 没有route 和ifconfig 命令更换为ip route 和ip add…