python爬虫笔记1

1 爬虫介绍

爬虫概述: 获取网页并提取和保存信息的自动化程序 1.获取网页 2.提取信息 css选择器 xpath 3.保存数据(大数据时代) 4.自动化 爬虫(资产收集,信息收集)+ 漏扫(帮我发现漏洞)= 钱src hw 逆向工程(必须)

2 urllib模块介绍

urllib 是 Python 标准库中的一个模块,用于执行 HTTP 请求操作。它包含了四个主要的子模块,每个子模块都有其特定的功能:

  • urllib.request 模块:这是最基本的 HTTP 请求模块,它提供了打开和读取 URL 的功能。使用此模块,你可以发起 GET 和 POST 请求,处理 cookies 和重定向,以及设置请求头部等。

  • urllib.error 模块:这个模块用于处理与 urllib.request 相关的异常。当你使用 urllib.request 发起请求时,如果遇到错误(如网络问题、无效的 URL 或服务器错误),该模块会抛出相应的异常,以便你能够捕获并处理这些错误。

  • urllib.parse 模块:这是一个工具模块,提供了处理 URL 的方法。你可以使用它来解析 URL,将其分解为各个组件(如协议、主机名、路径等),也可以构建新的 URL。此外,它还提供了编码和解码 URL 参数的功能。

  • urllib.robotparser 模块:这个模块用于解析 robots.txt 文件。robots.txt 文件是网站用来告诉爬虫哪些页面可以爬取,哪些页面不能爬取的。urllib.robotparser 模块提供了一个 RobotFileParser 类,用于读取和解析 robots.txt 文件,并判断一个特定的爬虫(通过其用户代理字符串)是否有权限访问某个 URL。

总结来说,urllib 是 Python 中用于执行 HTTP 请求和处理相关操作的内置库,它包含了请求、异常处理、URL 解析和机器人协议解析等功能的模块,使得开发者能够方便地进行网络请求和数据抓取。

3 第一个爬虫

新建urllib_1.py

#!/usr/bin/env python
​
import urllib.request
​
#发送一个最基本的请求
def load_baidu_data():
    url='http://www.baidu.com'
    response = urllib.request.urlopen(url)
    #print(response.code)
    data = response.read()
    #将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_baidu_data()

效果

4 get请求拼接

新建urllib_2.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import string
​
def load_baidu_data():
    url = 'http://www.baidu.com/s?wd='
    #url+search
    name = "李四"
​
    final_url= url+name
    #网址里面包含了汉字 需要进行转码
    encode_url = urllib.parse.quote(final_url,safe=string.printable)
    print(encode_url)
    response = urllib.request.urlopen(encode_url)
    # print(response.code)
    data = response.read()
    #将data获取到的东西转换为字符串
    str_data = data.decode('utf-8')
    print(str_data)
    #将数据写入文件
    with open("baidu-lisi.html","w",encoding="utf-8") as f:
        f.write(str_data)
    
    
    
load_baidu_data()   

效果

5 get请求拼接多个参数

新建urllib_3.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import string
​
def load_baidu_data():
    url = 'http://www.baidu.com/s?'
    params = {
        "wd":"猪八戒",
        "pn":"80"
    }
    query_str = urllib.parse.urlencode(params)
    final_url= url+query_str
    print(final_url)
    # encode_url = urllib.parse.quote(query_str,safe=string.printable)
    response = urllib.request.urlopen(final_url)
    # print(response.code)
    data = response.read()
    #将data获取到的东西转换为字符串
    str_data = data.decode('utf-8')
    print(str_data)
    #将数据写入文件
    with open("baidu-zhubajie-pn20.html","w",encoding="utf-8") as f:
        f.write(str_data)
​
load_baidu_data()

效果

6 post请求

新建urllib_post.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
​
#1.定义url
url = 'http://httpbin.org/post'
​
#创建要发送的数据表单
data = {
    'hello':'world',
    'handsome':'zhubajie'
}
​
#data要进行编码
data_encode = urllib.parse.urlencode(data).encode("utf-8")
​
#加上encode(“utf-8”)->  stt-》bytes
#解码 decode("utf-8")     byte-》str
​
response = urllib.request.urlopen(url=url,data=data_encode)
​
print(response.read().decode("utf-8"))

效果

7 超时设置

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
​
#1.定义url
url = 'http://httpbin.org/post'
​
#创建要发送的数据表单
data = {
    'hello':'world',
    'handsome':'zhubajie'
}
​
#data要进行编码
data_encode = urllib.parse.urlencode(data).encode("utf-8")
​
#加上encode(“utf-8”)->  stt-》bytes
#解码 decode("utf-8")     byte-》str
​
try:
    response = urllib.request.urlopen(url=url,data=data_encode,timeout=0.1)
    print(response.read().decode("utf-8"))
except urllib.error.URLError as e:
    print("连接超时!")

效果

8 自定义user-agent

自定义User-Agent是一种灵活调整浏览器或其他客户端在发送HTTP请求时所携带的身份标识的技术。通过修改User-Agent字符串,用户可以伪装成不同的客户端类型或操作系统,以满足特定需求,如进行兼容性测试、爬虫伪装或数据分析等。但需要注意的是,自定义User-Agent应遵守相关规定,避免滥用导致违反使用协议或法律。总之,自定义User-Agent为用户提供了更多控制和灵活性。

新建request_head.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
​
#1.定义url
url = 'http://httpbin.org/post'
​
#2自定义request  添加一个user-agent
header = {
    "User-Agent":"Mozilla/5.0 (Linux; U; Android 11; zh-CN; 2112123AC Build/RKQ1.200826.002) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/100.0.4896.58 Quark/6.2.2.246 Mobile Safari/537.36"
}
​
req = urllib.request.Request(url=url,headers=header,method='POST')
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))

效果

9 小项目-随机user-agent

新建randm_useragent.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
import random
​
def user_agent():
    url = 'http://httpbin.org/post'
    #搞一堆user-agent
    user_agent_list = [
        "Mozilla/5.0 (Linux; Android 12; ELS-AN00 Build/HUAWEIELS-AN00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/107.0.5304.141 Mobile Safari/537.36 XWEB/5075 MMWEBSDK/20230504 MMWEBID/9308 MicroMessenger/8.0.37.2380(0x2800253D) WeChat/arm64 Weixin NetType/5G Language/zh_CN ABI/arm64 MiniProgramEnv/android",
        "Mozilla/5.0 (iPhone; CPU iPhone OS............ile/15E148 MicroMessenger/8.0.34(0x18002234) NetType/4G Language/zh_CN",
        "Mozilla/5.0 (Windows; U; Windows NT 5.1; hu; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.1120",
        "Mozilla/5.0 (Macintosh; Int............ecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.67",
        "Mozilla/5.0 (X1............7.6) Gecko/20050318 Firefox/1.0.2",
        "Mozilla/5.0 (Windows; U; Win............o) Chrome/100.0.4896.58 Safari/537.36 UCBrowser/15.4.8.1238"
    ]
    #每次取一个user-agent
    random_user_agent = random.choice(user_agent_list)
    header = {
        "User-Agent":random_user_agent
    }
​
    req = urllib.request.Request(url=url,headers=header,method='POST')
    response = urllib.request.urlopen(req)
    print(response.read().decode("utf-8"))
​
user_agent()    

效果

10自定义构建opener

新建handler_open.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
​
def handler_open():
    url = 'http://httpbin.org/get'
    #创建自己的opener
    handler = urllib.request.HTTPHandler()
    opener = urllib.request.build_opener(handler)
    response = opener.open(url)
    print(response.read().decode("utf-8"))
    
handler_open()    

效果

11 配置代理

免费代理

新建proxy_handler.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
​
def handler_open():
    try:
        url = 'http://httpbin.org/get'
    #添加代理 代理的ip 端口
        proxy = {
            "http":"http://115.207.183.169:18784"
        }
        #创建代理处理器
        proxy_handler = urllib.request.ProxyHandler(proxy)
        #创建自己的opener
        opener = urllib.request.build_opener(proxy_handler)
        response = opener.open(url)
        print(response.read().decode("utf-8"))
    except urllib.error.URLError as e:
        print("error: ",e)    
    
handler_open()    
    

效果

12 小项目-随机ip代理

新建random_ip.py

#!/usr/bin/env python
​
import urllib.request
import urllib.parse
import urllib.error
import random
​
def proxy_ip():
    url = 'https://www.kuaidaili.com/testproxy'
    #搞一堆ip
    ip_list = [
        "http://183.161.45.66:17114",
        "http://119.41.198.172:18350",
        "http://27.191.60.244:15982",
        "http://27.215.237.221:20983",
    ]
    #每次取一个ip
    proxy = random.choice(ip_list)
    # header = {
    #     "User-Agent":random_user_agent
    # }
    print(proxy)
    try:
    #     url = 'http://httpbin.org/get'
    # #添加代理 代理的ip 端口
    #     proxy = {
    #         "http":"http://115.207.183.169:18784"
    #     }
        #创建代理处理器
        proxy_handler = urllib.request.ProxyHandler({'http':proxy,'https':proxy})
        #创建自己的opener
        opener = urllib.request.build_opener(proxy_handler)
        response = opener.open(url)
        print(response.read().decode("utf-8"))
    except urllib.error.URLError as e:
        print("error: ",e)    
​
proxy_ip()  

13 授权认证

新建authpassword.py

#!/usr/bin/env python
​
import urllib.request
​
from urllib.parse import urlparse
​
def auth_login():
    url = 'https://ssr3.scrape.center/'
    #指定用户名and密码
    username = 'admin'
    password = 'admin'
    #创建一个密码管理器
    password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
    #添加进目标url,用户名 密码
    password_mgr.add_password(None,url,username,password)
    #创建一个基本密码认证处理器并将密码管理器传递给他
    handler = urllib.request.HTTPBasicAuthHandler(password_mgr)
    #创建网络请求的构造器
    opener = urllib.request.build_opener(handler)
    response = opener.open(url)
    # response = urllib.request.urlopen(url)
    print(response.read().decode('utf-8'))
    
auth_login()    
    

效果

14 cookie认证流程

新建Cookie1.py

#!/usr/bin/env python
​
import urllib.request
​
from urllib.parse import urlparse
​
def auth_login():
    url = 'https://ssr3.scrape.center/'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54',
        'Authorization':'Basic YWRtaW46YWRtaW4='
    }
    req = urllib.request.Request(url=url,headers=headers)
    response = urllib.request.urlopen(req)
    print(response.read().decode('utf-8'))
    
auth_login()   

效果

15 使用cookiejar读写cookie

新建Cookie2.py

#!/usr/bin/env python
​
import urllib.request
import http.cookiejar
​
​
filename = 'cookies.txt'
#定义保存cookie的文件
filename = 'cookies.txt'
cookie = http.cookiejar.LWPCookieJar(filename=filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('https://www.baidu.com')
​
cookie.save(ignore_discard=True,ignore_expires=True)
​
​
#读:
cookie = http.cookiejar.LWPCookieJar()
cookie.load(filename,ignore_discard=True,ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

效果

16 小项目-使用cookie登录网页

新建Cookie3.py

#!/usr/bin/env python
​
import urllib.request
import http.cookiejar
import urllib.parse
​
#1.用账号密码登录网站
​
# #登录的url
url = 'https://www.yaozh.com/login'
#登录的参数
login_data = {
    "type":"0",
    "username":"ppkke007",
    "pwd":"Iceropq13315",
    "pc_vcode":"",
    "country":"86_zh-CN",
    "mobile":"",
    "vcode":"",
    "pincode":"",
    "formhash":"CEA7846B38",
    "backurl":"https%253A%252F%252Fwww.yaozh.com%252F"
}
#发送登录请求
cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.54',
}
# #转码
login_str = urllib.parse.urlencode(login_data).encode('utf-8')
​
req = urllib.request.Request(url=url,headers=headers,data=login_str)
#如果登录成功 cookjar会自动保存cookie
opener.open(req)
​
#2.代码带着cookie去访问
login_url = "https://www.yaozh.com/member/"
req2 = urllib.request.Request(login_url,headers=headers)
# response = opener.open(login_url)
response = urllib.request.urlopen(login_url)
# print(response.read().decode('utf-8'))
data = response.read()
with open('cookie2.html',"wb") as f:
    f.write(data) 

效果

17 异常处理

新建urlerror.py

#!/usr/bin/env python
​
import urllib.request
from urllib.error import *
import socket
​
try:
    url = 'https://www.baidu.com'
    response = urllib.request.urlopen(url=url,timeout=0.01)
except URLError as e:
     print(e.reason)
     if isinstance(e.reason,socket.timeout):
         print("Time out!!")
​
# except URLError as e:
#     print(e.reason)    

效果

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FK中的一些方法

1. 隔离法与整体法 目标:对一个拉新邀请任务,识别出其中的作弊用户。 欺诈类的数据,黑样本不足,需要自己去找,可按IP、昵称、手机号相似性等。虽然有 会员等级、注册时长、注册地址、成交订单等特征,但分类…

内网抓取Windows密码明文与hashdump思考题笔记整理

目录 思考题 第一题 第二题 第三题 第四题 第五题 思考题 1.windows登录的明文密码,存储过程是怎么样的,密文存在哪个文件下,该文件是否可以打开,并且查看到密文 2.我们通过hashdump 抓取出 所有用户的密文,分为…

扩散卷积模型 笔记

1 Title Diffusion Convolutional Neural Networks(James Atwood and Don Towsley)【NeurIPS 2016】 2 Conclusion This paper presents diffusion-convolutional neural networks (DCNNs), a new model for graph-structured data. Through the introd…

国内如何用GPT4

许多人曾向我咨询是否有一个稳定且不折腾的全球AI大模型测试网站,既能确保真实可靠性,又能保障稳定、快速的运行,避免频繁出现故障、错误或漫长的等待时间。到目前为止,我已经尝试了国内超过10个镜像站点,但遗憾的是&a…

【R语言】概率密度图

概率密度图是用来表示连续型数据的分布情况的一种图形化方法。它通过在数据的取值范围内绘制一条曲线来描述数据的分布情况,曲线下的面积代表了在该范围内观察到某一数值的概率。具体来说,对于给定的连续型数据,概率密度图会使用核密度估计&a…

分布式锁实现方案-基于zookeeper的分布式锁实现(原理与代码)

目录 一、基于zookeeper的分布式锁 1.1 基于Zookeeper实现分布式锁的原理 1.1.1 分布式锁特性说明 1.1.1.1 特点分析 1.1.1.2 本质 1.1.2 Zookeeper 分布式锁实现原理 1.1.2.1 Zookeeper临时顺序节点特性 1.1.2.2 Zookeeper满足分布式锁基本要求 1.1.2.3 Watcher机制 …

重生奇迹mu坐骑怎么升级

重生奇迹mu坐骑怎么升级 1、前期,都是主线任务,我们必须要跟着主线任务走,前面的话升级一次需要的经验很少的,一天下来可以升级100级是轻轻松松的,主线任务是比较多的,我们跟着任务一直做差不多可以到150级…

陇剑杯 省赛 攻击者1 CTF wireshark 流量分析

陇剑杯 省赛 攻击者1 题目 链接:https://pan.baidu.com/s/1KSSXOVNPC5hu_Mf60uKM2A?pwdhaek 提取码:haek ├───LogAnalize │ ├───linux简单日志分析 │ │ linux-log_2.zip │ │ │ ├───misc日志分析 │ │ acce…

MATLAB实现遗传算法优化BP神经网络预测数值(GABP)

遗传算法(Genetic Algorithm, GA)和反向传播(Back Propagation, BP)神经网络是两种强大的算法,分别用于优化和机器学习。将遗传算法与BP神经网络结合,可以利用遗传算法的全局搜索能力来优化BP神经网络的初始…

CAP实战Demo理论

问题 分布式微服务研发总会遇到CAP理论相关,但是没有相应例子,总是遗忘。 实践 实验 节点1 含有App1 Data1 节点2 含有App2 Data1 当节点1写请求执行成功,节点1数据为Data2,网络不通无法同步时 节点2 发送读请求 满足A可用性…

HBase安装部署

Apache HBase是按列存储数据的NoSQL类型数据库,其数据文件是存储在Hadoop集群中,支持数据以及服务的高可用性以及支持集群节点的大规模可扩展性,本文主要描述HBase的安装部署。 如上所示,HBase的总体架构,HBase Master…

「GO基础」变量

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【java】(软考)面向对象---责任链解析

目录 责任链的意义 手写笔记 ​编辑 责任链的意义 当您把请求给出时,如果某对象不能实现您的操作,责任链会自动把您的请求传给它的下一级 从而避免请求的发送者和接受者之间的耦合关系 这里以2007年下半年试题七进行说明 题目描述 某企业的采购审批…

EFK安装与使用!!!

一、将你的项目进行打包。 二、上传到docker, 启动项目 三、修改前端的代理路径 四、EFK相关配置 1、docker-compose.yml: version: 3 services:kibana:image: kibana:7.14.0ports:- "5601:5601"environment:- ELASTICSEARCH_HOSTShttp://19…

Excel数据处理:使用条件格式

选中你要特别体现的列 然后在开始处点击条件格式 标记大于1500000的值 点击突出显示 点击大于 输入1500000 设置单元格格式 点击条件格式 点击清除 去掉表头的格式 标记重复值强调显示 公式的使用 要去锁定单元格的值(加上F4) 比较后一列相同位置…

数据结构(七)——B树和B+树

7.4.1_1 B树 5叉查找树 //5叉排序树的结点定义 struct Node {ElemType keys[4]; //最多4个关键字struct Node &child[5]; //最多5个孩子int num; //结点中有几个关键字 }; 如何保证查找效率? eg:对于5叉排序树,规定…

kafka学习1 - 线程、进程消息通信方式、JMS模型、Kafka原理图

1、线程和线程之间的数据交互 两个不同的线程之间是可以通过堆内存的方式进行数据交互的; T1线程的数据发送得到堆内存,T2线程就可以共享堆内存的数据。 存在的问题: T1线程发送数据的速率是50/s,T2线程消费的速率是30/s&#…

Jmeter-非GUI模式下运行jmeter脚本-适用于服务器上持续集成测试

背景 大部分Jmeter脚本都是部署在Linux上运行,利用Jenkins做接口自动化,定时巡检任务。 执行命令 1.进入jmeter的目录,bin文件夹 cd C:\path\to\jmeter\bin2.运行脚本文件 jmeter -n -t D:\{脚本文件目录}\xxx.jmx -l D:\{脚本文件目录}…

mac可以玩steam吗 mac安装steam教程 苹果电脑能打steam游戏吗 苹果电脑怎么安装windows 苹果mac电脑配置AI功能的M4芯片

众所周知,Steam作为一个热门的游戏平台,深受国内外玩家的喜爱,平台中包含了无数的游戏,在作战时玩家们能够与朋友们互动聊天,还能匹配好友组队,同时还能增进与同伴的默契度。 但是最近有玩家们提问说&#…

Python编程技巧揭秘:深入理解Lambda函数,如何使用匿名函数简化你的代码

文章目录 1. Lambda函数2. 在实际应用中使用Lambda2.1 使用Lambda函数进行列表排序2.2 在高阶函数中使用Lambda 3. Lambda的局限性和注意点 在这篇文章中,将深入探讨Python中的Lambda函数,这是一种强大的编程工具,可以以更简洁、高效的方式编…