爬虫的基本使用

news2024/12/26 10:39:12

文章目录

  • urllib库
    • 1、基本使用
    • 2、一个类型、六个方法
    • 3、下载操作
    • 4、请求对象的定制
    • 5、get请求的quote方法
    • 6、get请求的urlencode方法
    • 7、post请求百度翻译
    • 8、post请求百度翻译之详细翻译
      • 小技巧:正则替换
    • 9、agax的get请求豆瓣电影第一页
    • **10、agax的get请求豆瓣电影的前十页(综合案例)**
    • 11、agax的post请求肯德基官网
    • 12.微博的cookie登录
    • 13.Handler处理器


urllib库

1、基本使用

在这里插入图片描述

import urllib.request

# 利用urllib来获取百度首页的源码

# 1、定义一个url 就是你要访问的地址
url = "http://www.baidu.com"

# 2、模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)

# 3、获取响应中的页面的源码
# read 返回的是字节形式的二进制数据
# 我们要将二进制的数据转换成字符串,叫做解码 decode('编码的格式')
content = response.read().decode('utf-8')

#4、打印数据
print(content)

2、一个类型、六个方法

import urllib.request

url = "http://www.baidu.com"

response = urllib.request.urlopen(url)

# 一个类型和6个方法{
# 一个类型 HTTPResponse
# 六个方法 read readline readlines getcode geturl getheaders
# }

# response是HTTPResponse的类型# <class 'http.client.HTTPResponse'>
print(type(response))

# # 按照一个字节一个字节的去读
# content = response.read
# print(content)

#返回多少个字节
content=response.read(5)#5代表只读5个字节
print(content)

# 只读取一行
content=response.readline()#只能读取一行
print(content)

# 全读完
content=response.readlines()
print(content)

# 返回状态码 比如200
print(response.getcode())

# 返回的是url地址 http://www.baidu.com
print(response.geturl())

# 获取的是一个状态信息
print(response.getheaders())

3、下载操作

import urllib.request
# 下载网页
url_page="http://www.baidu.com"
# 下面这个方法很重要!!!
#url代表的是下载的路径,filename文件的名字
#在python中,可以写变量的名字,也可以直接写值
urllib.request.urlretrieve(url_page,'baidu.html')

# 下载图片
url_img=""
urllib.request.urlretrieve(url_img,'图片.jpg')

# 下载视频
url_video=""
urllib.request.urlretrieve(url_video,'bili.mp4')


4、请求对象的定制

在这里插入图片描述
直接访问带有https的百度页面(http没有影响),会遇到UA反爬,所以要进行伪装,在自己的浏览器中找到UA,复制,然后定制request对象,把这个request传参进去,就可以正常的爬取百度网页了

import urllib.request
url="https://www.baidu.com"
#url的组成
# http/https    www.baidu.com      80/443
#  协议            主机              端口号         路径         参数        锚点

# http 80
# https 443
# mysql 3306
# oracle 1521
# redis 6379
# mongodb 27017

headers={
"User-Agent": ""
}

# 因为urlopen方法中不能存储字典,所以headers不能传递进去
# 所以要进行请求方法的定制
# 注意:因为参数顺序的问题,不能直接写url和headers,中间还有data 所以我们要关键字传参
request=urllib.request.Request(url=url,headers=headers)
response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
print(content)


5、get请求的quote方法

import urllib.request
import urllib.parse
# 获取周杰伦网页的源码
url=""

#请求对象的定制,为了解决反爬的第一种手段
headers={
"User-Agent": ""
}

#将周杰伦三个字变成unicode编码的格式
# 我们需要urllib.parse.quote将周杰伦变成unicode编码
name=urllib.parse.quote('周杰伦')
url=url+name

#请求对象的定制
request=urllib.request.Request(url=url,headers=headers)

#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)

#获取响应的内容
content=response.read().decode('utf-8')

print(content)

6、get请求的urlencode方法

import urllib.parse
import urllib.request
# urlencode方法应用场景:多个参数的时候

# https://www.baidu.com/s?wd=周杰伦&sex=男
# data={
#     'wd':'周杰伦',
#     'sex':'男',
#     'locatio':'中国台湾省'
# }
# a=urllib.parse.urlencode(data)
# print(a)


#获取https://www.baidu.com/s?wd=%E5%91%A8%E6%9D%B0%E4%BC%A6&sex=%E7%94%B7&location=%E4%B8%AD%E5%9B%BD%E5%8F%B0%E6%B9%BE%E7%9C%81的网页源码
base_url=""
data={
    'wd':'周杰伦',
    'sex':'男',
    'locatio':'中国台湾省'
}

new_data=urllib.parse.urlencode(data)
#请求资源的路径(url)
url=base_url+new_data
headers={
"User-Agent": ""
}
#请求对象的定制
request=urllib.request.Request(url=url,headers=headers)

#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)

#获取网页源码的数据
content=response.read().decode('utf-8')
print(content)

7、post请求百度翻译

import urllib.request
import urllib.parse

url = ""
headers = {
    "User-Agent": ""
}
data = {
    'kw': 'spider'
}

# post请求的参数,必须要进行编码(.encode('utf-8'))
data = urllib.parse.urlencode(data).encode('utf-8')

# post的请求参数,是不会拼接在url的后面的,而是需要放在请求对象定制的参数当中
# post请求的参数,必须要进行编码
request = urllib.request.Request(url=url, data=data, headers=headers)

#模拟浏览器向服务器发送请求
response=urllib.request.urlopen(request)

# 获取响应的数据
content=response.read().decode('utf-8')

print(content)

# post请求方式的参数 必须编码 data=urllib.parse.urlencode(data).encode('utf-8')
#编码之后,必须调用encode()方法
# 参数是放在请求对象定制的方法当中 request = urllib.request.Request(url=url, data=data, headers=headers)

8、post请求百度翻译之详细翻译

小技巧:正则替换

在这里插入图片描述

import urllib.request
import urllib.parse

url = 'https://fanyi.baidu.com/v2transapi?from=en&to=zh'
headers = {
}

data = {
    "from": "en",
    "to": "zh",
    "query": "love",
    "simple_means_flag": "3",
    "sign": "198772.518981",
    #此处省略
    "domain": "common",
}

# post请求的参数,必须进行编码,并且要调用encode方法
data = urllib.parse.urlencode(data).encode('utf-8')
# 请求对象的定制
request = urllib.request.Request(url=url, data=data, headers=headers)
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(request)

# 获取响应的数据
content = response.read().decode('utf-8')

print(content)

9、agax的get请求豆瓣电影第一页

import urllib.request

url=""
headers={
"User-Agent": ""
}
# 请求对象的定制
request=urllib.request.Request(url=url,headers=headers)
# 获取响应的数据
response=urllib.request.urlopen(request)
content=response.read().decode('utf-8')
print(content)
#数据下载到本地
# open默认情况下使用的是gbk编码,如果我们想保存汉字,那么需要在open方法中指定编码格式为utf-8
fp=open('douban.json','w',encoding='utf-8')
fp.write(content)

# 写成下面这样也行,效果一样
with open('douban1.json','w',encoding='utf-8') as fp:
    fp.write(content)

10、agax的get请求豆瓣电影的前十页(综合案例)

# 下载豆瓣电影前十页的数据
# 1、请求对象的定制
# 2、获取响应的数据
# 3、下载数据
import urllib.parse
import urllib.request


def create_request(page):
    base_url = ""
    data = {
        'start': (page - 1) * 20,
        'limit': 20
    }
    data = urllib.parse.urlencode(data)
    url = base_url + data

    # print(url)

    headers = {
        "User-Agent": ""
    }

    request = urllib.request.Request(url=url, headers=headers)
    return request


def get_content(request):
    response = urllib.request.urlopen(request)
    content = response.read().decode('utf-8')
    return content


def down_load(page, content):
    with open('douban_' + str(page) + '.json', 'w', encoding='utf-8') as fp:
        fp.write(content)


# 程序的入口
if __name__ == '__main__':
    start_page = int(input("请输入起始的页码:"))
    end_page = int(input("请输入结束的页面:"))
    # 每一页都有自己的请求对象的定制
    for page in range(start_page, end_page + 1):
        request = create_request(page)
        # 获取响应的数据
        content = get_content(request)
        # 下载
        down_load(page, content)

11、agax的post请求肯德基官网

import urllib.request
import urllib.parse


def creat_request(page):
    base_url = ''
    data = {
        'cname': '北京',
        'pid': '',
        'pageIndex': page,
        'pageSize': '10'
    }
    data = urllib.parse.urlencode(data).encode('utf-8')

    headers = {
        "User-Agent": ""
    }
    request = urllib.request.Request(url=base_url, headers=headers, data=data)
    return request

def get_content(request):
    response=urllib.request.urlopen(request)
    content=response.read().decode('utf-8')
    return content

def down_load(page,content):
    with open('kfc_'+str(page)+'.json','w',encoding='utf-8') as fp:
        fp.write(content)

if __name__ == '__main__':
    start_page = int(input('请输入起始页码:'))
    end_page = int(input('请输入结束页码:'))
    for page in range(start_page, end_page + 1):
        #请求对象的定制
        request=creat_request(page)
        # 获取网页源码
        content=get_content(request)
        # 下载
        down_load(page,content)

12.微博的cookie登录

import urllib.request

url = ''
headers = {
    # 请求头要那个最全的
}
request = urllib.request.Request(url=url, headers=headers)
reponse = urllib.request.urlopen(request)
content = reponse.read().decode('utf-8')
with open('weibo.html', 'w', encoding='utf-8') as fp:
    fp.write(content)

13.Handler处理器

import urllib.request

url = '';
headers = {
    # 要那个短的请求头
}
request = urllib.request.Request(url=url, headers=headers)

# 获取handler对象
handler = urllib.request.HTTPHandler()
# 获取opener对象
opner = urllib.request.build_opener(handler)
# 调用open方法
response = opner.open(request)

content = response.read().decode('utf-8')

print(content)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用容器跑一个zabbix 监控另外一个虚机的基础项

目录 安装docker mysql数据库部署 拉取mysql镜像 运行mysql服务器 创建zabbix用户和数据库 进入docker容器登陆数据库 创建zabbix数据库创建zabbix用户 zabbix用户授权 复制mysql初始化数据库文件到容器 导入zabbix初始化数据 zabbix服务器部署 拉取镜像 运行容器 效果…

Linux环境下,JAVA环境调用C++的动态链接库so

1、使用QT开发一个动态链接库.so&#xff08;本次使用linux环境&#xff0c;在windows下是.dll&#xff09; 代码文件包含 testdll.cpp testdll.h testdll.pro testdll_global.h testdll.pro #------------------------------------------------- # # Project created by QtC…

苹果手机怎么清理内存垃圾?2个方法,快速解决

很多小伙伴在生活中会使用手机来看视频、聊天、学习等等。不管是苹果手机还是安卓手机&#xff0c;使用手机的时间长了&#xff0c;里面就会产生很多垃圾占据手机空间。苹果手机怎么清理内存垃圾&#xff1f;今天小编就来分享2个方法&#xff0c;教你快速解决。 一、删除不常用…

ansible(第五天)

五、实施任务控制 161 1.循环&#xff08;迭代&#xff09;--- loop --item 1.利用loop----item循环迭代任务 with_* 通过循环管理员不需要编写多个使用同一模块的任务。例&#xff1a;他们不需要编写五个任务来确保存在五个用 户&#xff0c;而是只需要编写一个任务来对含有…

R语言应用xgboost进行机器学习(2)

XGBoost 机器学习模型是一种高效且可扩的展的机器学习分类器&#xff0c;由 Chen 和 Guestrin 在 2016 年推广。XGBoost原理是是在决策树的基础上产生迭代&#xff0c;它以 boosting 的方式结合了多个决策树。通常创建每棵新树是为了通过梯度提升来减少先前模型的误差&#xff…

(day4) 自学Java——字符串

ctrlaltT 选择语句包裹 目录 1.API 2.String创建 3.字符串的比较 4.字符串——练习 (1):用户登录 (2)遍历字符串和统计字符个数 (3)字符串拼接和反转 (4)金额转换 (5)手机号屏蔽&#xff0c;游戏敏感词替换 5.StringBuilder 6.字符串相关类的底层原理 7.较难练习 …

苹果手机发热发烫怎么办?常见原因及解决办法

很多小伙伴都喜欢使用苹果手机&#xff0c;有时候正在玩着苹果手机的时候&#xff0c;发现自己的苹果手机温度很高&#xff0c;很烫手&#xff0c;这是怎么一回事呢&#xff1f;苹果手机发热发烫怎么办&#xff1f;别担心&#xff0c;下面跟着小编一起来看看苹果手机发热发烫常…

Java之集合概述、ArrayList的使用、常见API和集合案例

目录集合概述总结ArrayList集合快速入门总结ArrayList对于泛型的支持总结ArrayList常用API、遍历集合案例遍历并删除元素值总结存储自定义类型的对象元素搜索集合概述 总结 1、数组和集合的元素存储的个数问题? 数组定义后类型确定&#xff0c;长度固定集合类型可以不固定&a…

MyBatis 动态SQL使用

动态 sql 是Mybatis的强⼤特性之⼀&#xff0c;能够完成不同条件下不同的 sql 拼接。 1.<if>标签 运行结果&#xff1a; 2.<trim>标签 之前的插⼊⽤户功能&#xff0c;只是有⼀个 photo 字段可能是选填项&#xff0c;如果有多个字段&#xff0c;⼀般考虑使⽤&l…

VS Code安装教程

一、下载 1、官网 下载地址 2、下载 根据自己电脑型号下载&#xff0c;此处以Windows为例。 二、安装 1、下载完成后&#xff0c;直接点击安装包安装&#xff0c;即可。 2、开始安装&#xff0c;然后下一步 3、可以在此处自定义地址&#xff0c;然后下一步 4、默认设置&am…

数据结构课程设计

数据结构课程设计 文章目录数据结构课程设计1.1问题描述1.2需求分析1.3概要设计1.4详细设计1.5调试分析1.6测试结果1.7参考文献1.8源码1.1问题描述 编制一个能演示执行集合的交、并和差运算的程序。 要求&#xff1a; 集合元素用小写英文字母&#xff0c;执行各种操作应以对话…

iOS 系统校园无线WIFI认证上网指南

无为WiFi介绍一下IOS手机怎么连接校园网&#xff0c;本介绍为普通途径连接使用校园网&#xff0c;想了解绕过校园网请看其他贴文。1. 打开无线网络&#xff08;WLAN&#xff09;开关2. 连接校园无线WiFi网络进入“设置”->“无线局域网”->在无线WiFi信号列表中选择“SWJ…

【从零开始学习深度学习】40. 算法优化之AdaGrad算法介绍及其Pytorch实现

之前介绍的梯度下降算法中&#xff0c;目标函数自变量的每一个元素在相同时间步都使用同一个学习率来自我迭代。例如&#xff0c;假设目标函数为fff&#xff0c;自变量为一个二维向量[x1,x2]⊤[x_1, x_2]^\top[x1​,x2​]⊤&#xff0c;该向量中每一个元素在迭代时都使用相同的…

线程安全详解

线程安全 线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中&#xff0c;线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行&#xff0c;不会出现数据污染等意外情况。 多个线程访问同一个对象时&#xff0c;如…

【docker11】docker安装常用软件

docker安装常用软件 1.安装软件说明 框架图 总体步骤&#xff1a; 搜索镜像拉去镜像查看镜像启动镜像 - 服务端口映射停止容器移除容器 1.安装tomcat docker hub上查找tomcat镜像 从docker hub上拉取tomcat镜像到本地 docker images查看是否有拉取到的tomcat 使用to…

Spring Security 导致 Spring Boot 跨域失效问题

1、CORS 是什么首先我们要明确&#xff0c;CORS 是什么&#xff0c;以及规范是如何要求的。这里只是梳理一下流程。CORS 全称是 Cross-Origin Resource Sharing&#xff0c;直译过来就是跨域资源共享。要理解这个概念就需要知道域、资源和同源策略这三个概念。域&#xff0c;指…

sahrding-jdbc的雪花算法取模为0或1的问题

工作时无意间发现sahrding-jdbc使用雪花算法生成的id 在某一业务分库分表 永远在那两个库表里面,排查后这里做下分享 环境、配置、问题介绍 16库16表使用的是org.apache.shardingsphere.core.strategy.keygen下面generateKey生成id分库表算法是对16取模生成数据永远在0库0表 0…

如何有效的防护暴力破解和撞库攻击

在网络威胁领域&#xff0c;暴力破解攻击仍然是网络犯罪分子非常喜爱且有利可图的攻击方法。&#xff0c;黑客通过收集互联网已泄露的用户和密码信息&#xff0c;生成对应的字典表&#xff0c;由于许多用户重复使用相同的用户名和密码&#xff0c;攻击者可以使用撞库攻击获得对…

前缀和算法

目录1.概述2.代码实现2.1.一维前缀和2.2.二维前缀和3.应用本文参考&#xff1a; LABULADONG 的算法网站 1.概述 前缀和算法分为一维和二维&#xff0c;一维前缀和可以快速求序列中某一段的和&#xff0c;而二维前缀和可以快速求一个矩阵中某个子矩阵的和。 2.代码实现 2.1.一…

约拍小程序开发,优化约拍产业路径

随着网红、直播经济的发展&#xff0c;年轻群体对于拍摄服务的需求正在急速增长&#xff0c;与此同时该群体用户又极具个性&#xff0c;很多传统影楼拍摄价格高、拍摄风格固定化、等待时间久&#xff0c;个人摄影师宣传推广难度又大&#xff0c;导致拍摄需求被抑制&#xff0c;…