社团课Day1-网络爬虫介绍/Requests库的使用

本文介绍了Python爬虫的基础知识,包括HTTP协议、GET和POST请求、Requests库的使用,如设置代理IP和处理Cookie信息。通过实例演示了百度搜索、有道翻译、下载百度图片及TIOBE编程语言流行趋势爬虫的实现,同时讲解了如何利用pyinstaller将爬虫打包成可执行文件。
摘要由CSDN通过智能技术生成

爬虫

1.什么是爬虫

  • 通俗解释 : 通过Python(爬虫代码), 下载互联网上的数据到本地, 并且提取出我们需要的信息的过程就是就是爬虫

  • 网络爬虫(又被称为网页蜘蛛,网络机器人,或者经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。二十年前是一种黑客行为

  • 分类
  • 普通爬虫、多线程爬虫、异布爬虫
  • 企业/对大型网站:Scrapy框架、Celery分布式

  • 还可以学习到:计算机网络、面向对象
  • Web与HTTP协议介绍
    超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。
    HTTP是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;
    服务器接到请求后,给予相应的响应信息。
  • 爬虫模拟这个过程
  • 发送HTTP请求
GET 获取资源GET /comments?postld=1 HTTP/1.1
POST POST /创建资源posts HTTP1.1
PUT PUT /更新资源posts HTTP/1.1
DELETE 删除资源DELETE /posts/1 HTTP/1.1
  • 接受HTTP响应
100 - 199 一般信息100 Continue
200 - 299 成功响应201 Created
300 - 399 重定向301 Moved Permanently
400 - 499 客户端错误404 Not Found
500 - 599 服务端错误500 Internal Derver Error
  • 爬虫的流程步骤
  1. 确定需求:需要什么
  2. 寻找需求:在哪找,什么网站
  3. 发送请求:网页摆放,链接地址
  4. 解析数据:提取关键节点数据
  5. 存储数据:存入数据库/写入文件
  • 环境

系统:Linux/MacOs/windows
版本:Python3.4以上
IDE:Anaconda/Pycharm/Sublime/vscode(看个人喜好)…


2. 请求方式:GET&POST(最常用)

  • GET是默认的HTTP请求方式,用于直接输入网址的方式去访问网页

  • POST方法主要是向Web服务器提交表单数据,通常表单提交时采用POST方法

  • GET请求把参数包含在URL中,POST通常通过请求体传递参数

  • GET相对POST不安全,参数直接暴露在URL上,用来传递敏感信息

3. requests使用代理IP

headers = {
   
 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36'
}

这是其中一种,后面案例也会讲到,上面这个是指我是用Win系统Chrome浏览器的用户,想看其他浏览器或者其他系统也可以百度搜User-Agent

  • 如果不做这一步,浏览器看到的我们是{'User-Agent': 'python-requests/2.22.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}就是很明显的一个爬虫,很多有robots协议的网站就会访问不到

4. requests处理cookie信息

什么是cookie?

是什么?有什么作用?

http请求是无状态的请求协议,
不会记住用户的状态和信息,
也不清楚你在这之前访问过什么?

因为网站需要记录用户是否登录时,就需要在用户登录后创建一些信息
并且要把这些信息记录在当前用户的浏览器中,记录的内容就是cookie
用户使用当前的这个浏览器继续访问这个服务器时,会主动携带这个网站设置的cookie信息

cookie会在浏览器中记录信息,并且在访问时携带这个信息
1,浏览器更换或删除cookie后,信息丢失
2,cookie在浏览器中记录的信息是不安全的,因为不能记录敏感信息

session

session是在服务器端进行数据的记录,
并且在给每个用户会生成一个sessionID,
并且把这个sessionID设置在用户的浏览器中,也就是设置为cookie


网络请求Requests

requests库

  • 安装
python -V(显示版本)
python3 -V(安装)
pip install requests(安装。win系统直接pip,多个python版本用pip3)
pip3 show requests(查看安装情况)

查看库信息

  • Python第三方库:https://pypi.org/ (官方文档

实操

1.百度爬虫

python发请求,显示网页源代码

  • 浏览器打开百度www.baidu.com
  • 右键点击检查,或键盘点击F12
  • 点击Network,刷新
    下面的www.baidu.com是发送的请求
  • 右侧是解析库结果
  • Headers里面有General,
    Response Headers是请求头信息
    Request Headers是响应头信息
  • Host请求的主题地址
  • 用户代理,不同机器不同浏览器都是不一样的,可以搜索User-Agent看看
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
import requests
# 定义请求的url
url = 'https://www.baidu.com'
# 发起get请求
res = requests.get(url=url)
# 获取相应结果
print(res)  # <Response [200]>
print(res.content) # b'...' 二进制的文本流
print(res.content.decode('utf-8')) # 把二进制的文本流按照utf8的字符集转换为普通字符串
print(res.text) # 获取响应的内容
print(res.status_code) # 请求状态码 200
print(res.url) # 请求的url地址
print(res.request.headers)# 请求的头信息 
print(res.headers) #响应头信息

2.有道翻译爬虫
  • 先看POST请求
    ajax不刷新就可以得到内容
  • F12-点击Network刷新-输入"你好"
  • XHR-AJAX请求项
  • 输入"你好 世界",Preview中找到你好世界
  • headers-同时出现Response/Request Headers
    URL地址,请求格式是POST,Response里有响应内容是json格式
  • From Data-i是发送的内容,返回的内容格式doctype:json
import requests
# 定义请求的url
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule'
# 定义请求的参数
data = {
    'i':'你好',
    'doctype':'json'
}
# 发起请求 post
res = requests.post(url,data=data)
# 查看请求结果,
code = res.status_code
print(code)
if code == 200:
    # 解析数据
    # print(res.content)
    # print(res.json())  # 如果返回的是json数据,可以直接解析
    resdata = res.json()
    if resdata['errorCode'] == 0:
        # 请求成功
        print(resdata['translateResult'][0][0]['tgt'])

成功了之后,开始封装

import requests
# 封装翻译的函数
def fanyi(kw):
    # 定义请求的url
    url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule"
    # 定义请求的参数
    data = {"i": kw, "doctype": "json"}
    # 发起请求 post
    res = requests.post(url, data=data)
    # 查看请求结果,
    code = res.status_code
    if code == 200:
        # 解析数据
        # print(res.content)
        # print(res.json())  # 如果返回的是json数据,可以直接解析
        resdata = res.json()
        if resdata["errorCode"] == 0:
            # 请求成功
         
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值