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+searchname = "李四"
​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_strprint(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-agentuser_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-agentrandom_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'#创建自己的openerhandler = 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)#创建自己的openeropener = 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'#搞一堆ipip_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",]#每次取一个ipproxy = 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})#创建自己的openeropener = 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)    

效果

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

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

相关文章

使用Python比较两张人脸图像并获得准确度

使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。 一、原理 使用Face Recognition python 模块来获取两张图像的128 个面部编码,并比较这些编码。比较结果返回 True 或 False。如果结果为True ,那么两个图像将是相同的…

Python程序设计 字典

教学案例十 字典 1. 判断出生地 sfz.txt文件中存储了地区编码和地区名称 身份证的前6位为地区编码,可以在sfz.txt文件中查询到地区编号对应的地区名称 编写程序,输入身份证号,查询并显示对应的地区名称 若该地区编码不在文件中,…

SQVI创建以及生成程序

SAP数据快速查询工具:Sqvi-QuickView 项目实施&运维阶段,为了快速获取一些透明表数据,一开始接触项目肯定会通过大量的数据表查找,然后线下通过EXCEL通过VLOOKUP进行数据关联,这种方式在关联数据较少的情况比较适应…

齐超:思颜肌密从单科特长生向全科学霸进化

“从单科特长生向全科学霸进化”。 中国化妆品行业发展至今,走过了线下渠道蓬勃发展的时代,也经历了电商渠道的黄金时代,继而迈入当下的直播时代。而在每一个时代的转折点上,思颜肌密始终在行业前列,跨越一个个生命周…

书生·浦语大模型实战营Day04OpenXLab 部署

书生浦语大模型实战营Day04OpenXLab 部署 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。 OpenXLab浦源平台介绍 OpenXLab 浦源平台以开源为核心,旨在构建开源开放的人工智能生态,促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供…

FPGA - ZYNQ Cache一致性问题

什么是Cache? Cache是一种用来提高计算机运行速度的一种技术。它是一种小而快的存储设备,位于CPU与内存之间,用于平衡高速设备与低速设备之间的速度差异。Cache可以存储常用的数据或指令,以便CPU更快地获取,从而减少对…

竞逐智能家居大模型:美的“蓄力”,海尔“疾行”

配图来自Canva可画 随着ChatGPT火热出圈,AI大模型便成为了各行各业必争的高地。“BAT”等互联网大厂、华为、小米等通讯巨头,以及一些垂直AI公司,都开始在大模型市场积极布局。众所周知,发展大模型的关键在于应用场景的落地&…

Redis-cluster集群架构

一、集群架构 上述集群架构师一个由多个主从节点群组成的分布式服务器,具有复制、高可用和分片的特性。Redis集群不需要sentine哨兵也能完成节点移除和故障转移。官方文档称可以扩展上万个节点。推荐不超过1000个;从节点只担任备份的角色,不承…

MySQL基础篇总结

参考:黑马程序员MySQL基础视频链接 数据库基本操作 启动与停止 1.第一种方式: 1>以管理员身份运行cmd 2>在命令行窗口中输入: 启动:net start mysql80停止:net stop mysql80 2.第二种方式: 1>WinR快捷方式打开如下: 输入&#…

【可视化大屏开发】19. 加餐-百度地图API实现导航加线路热力图

需求 Web端使用场景中会涉及到地图导航路线情况,并利用热力图显示路况信息。 实现效果如下: 输入起始地点,选择并开始导航 最终效果 思路步骤 利用百度地图API显示地图交通拥堵情况的热力图,需要按照以下步骤进行开发 步骤1&a…

9.Godot数组|遍历|静态变量|对象|调试

数组和字典的遍历 数组的概念 数组是一组数据的集合。在程序中负责批量处理数据。数组中的元素可以包括各个类型的数据,也可以对数组内数据类型进行限定。可以通过 数组名【数字】 的形式来访问数组元素,数字 0 代表数组的第一个元素。数组可以通过调用…

【大数据】TiDB: A Raft-based HTAP Database

文章目录 数据库知识介绍数据库系统的ACID特性分布式系统和CAP理论关系型数据库与非关系型数据库关系型数据库非关系型数据库 OldSQL、NoSQL、NewSQLOldSQLNoSQLNewSQL OLTP、OLAP、HTAP 前言:为什么选择TiDB学习?pingCAP介绍TiDB介绍TiDB的影响力TiDB概…

Java发送邮件 启用SSL

使用的maven依赖: <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.4.7</version> </dependency> 配置文件mail.properties如下: # 邮箱配置 email.username=your-email@exa…

[Java EE] 多线程(三):线程安全问题(上)

1. 线程安全 1.1 线程安全的概念 如果多线程环境下代码运行的结果不符合我们的预期,则我们说存在线程安全问题,即程序存在bug,反之,不存在线程安全问题. 1.2 线程不安全的原因 我们下面举出一个线程不安全的例子:我们想要在两个线程中对count进行操作 public class Demo9 …

山东大学操作系统实验一(Linux虚拟机实现)

目录 实验题目 实验要求 示例程序 主程序 头文件 重点代码解析 一、main函数的参数 参数介绍 参数输入方式 本块代码 二、信号处理 本块代码 原理介绍 实现效果 三、kill函数 功能介绍 使用方式 本块代码 四、头文件处理 本块代码 代码作用 实验程序 …

微调Llama3实践并基于Llama3构建心理咨询EmoLLM

Llama3 Xtuner微调Llama3 EmoLLM 心理咨询师

【嵌入式DIY实例】-称重计

DIY称重计 文章目录 DIY称重计1、硬件准备1.1 HX711 称重传感器模块2、硬件接线原理图3、代码实现在本文中,我们将使用数字体重秤 HX711 称重传感器模块来实现一个简易的称重计。 HX711 模块非常适合测量重量、力或任何其他可以以克为单位的东西。 该模块易于使用,可以连接到…

SpringBoot-餐饮业供应商管理系统-94116

SpringBoot餐饮业供应商管理系统 摘 要 随着餐饮业竞争的加剧&#xff0c;不仅需要有吸引力的菜肴&#xff0c;还需要先进的管理手段&#xff0c;才能在餐饮业站稳脚跟。通过完善的餐饮业供应商管理系统&#xff0c;不仅可以帮助餐饮企业在物流配送、商品管理等方面有所改进&a…

代码随想录总结|60天代码随想录训练结束(图论没开)

今年2月19日晚上我辗转反侧&#xff0c;看着目标院校复试群发呆。大学3年&#xff0c;前两年生病养病&#xff0c;后半年家里出了状况&#xff0c;玉玉了半学期。算是一事无成了&#xff0c;寒假尝试着刷LeetCode&#xff0c;就从B站上找教程&#xff0c;就找到了卡哥。看了一下…

Python根据公募基金在一定时期内持有的股票数据进行社会网络分析

【背景】根据提供的公募基金在一定时期内持有的股票数据&#xff0c;构建一个社会网络分析框架&#xff0c;度量每个基金在每年的度中心度、介数中心度和特征向量中心度&#xff0c;并对相关数据做出简要说明。 【代码】 import networkx as nx import pandas as pd import n…