python基础爬虫反爬破解

news2024/11/19 2:45:04

文章目录

  • 爬虫初识
    • 1. HTTP协议与WEB开发
      • (1)简介
      • (2)socket套接字
      • (3)请求协议与响应协议
    • 2. requests&反爬破解
      • (1)UA反爬
      • (2)referer反爬
      • (3)cookie反爬
    • 3. 请求参数
      • (1)get请求以及查询参数
      • (2)post请求以及请求体参数
    • 4. 爬虫图片和视频
      • (1)直接爬取媒体数据流
      • (2)批量爬取数据
  • 总结


爬虫初识

在这里插入图片描述

简单来说:代替人去模拟浏览器进行网页操作。
爬虫是一种自动地获取网页数据并存储到本地的程序。它的主要作用是获取网站上的数据,这些数据可以用于分析、研究、开发等多种目的。爬虫可以帮助我们获取网站上的数据,而不需要人工浏览和抓取。爬虫的分类主要有通用爬虫和聚焦爬虫。通用爬虫是指搜索引擎和大型web服务提供商的爬虫,它们抓取的是一整张页面数据。聚焦爬虫是针对特定网站的爬虫,它们定向的获取某方面数据的爬虫。

  • Python做爬虫的优势:
    • PHP : 对多线程、异步支持不太好
    • Java : 代码量大,代码笨重
    • C/C++ : 代码量大,难以编写
    • Python : 支持模块多、代码简洁、开发效率高 (scrapy框架)

1. HTTP协议与WEB开发

1. 什么是请求头请求体,响应头响应体
2. URL地址包括什么
3. get请求和post请求到底是什么
4. Content-Type是什么

(1)简介

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
在这里插入图片描述

(2)socket套接字

在这里插入图片描述

最简单的web应用程序

import socket

sock = socket.socket()
sock.bind(("127.0.0.1", 7777))
sock.listen(3)

print("京东服务器已经启动...")
while 1:
    conn, addr = sock.accept()
    data = conn.recv(1024)
    print("data:", data)
    conn.send(
        b"HTTP/1.1 200 ok\r\ncontent-type:text/plain\r\n\r\n<h1>alex black girl!</h1><img "
        b"src='https://img0.baidu.com/it/u=4011424408,4733765&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=750'>")
    conn.close()

基于postman完成测试!

(3)请求协议与响应协议

http协议包含由浏览器发送数据到服务器需要遵循的请求协议与服务器发送数据到浏览器需要遵循的请求协议。用于HTTP协议交互的信被为HTTP报文。请求端(客户端)的HTTP报文 做请求报文,响应端(服务器端)的 做响应报文。HTTP报文本身是由多行数据构成的字文本。
在这里插入图片描述

一个完整的URL包括:协议、ip、端口、路径、参数

例如: https://www.baidu.com/s?wd=yuan 其中https是协议,www.baidu.com 是IP,端口默认80,/s是路径,参数是wd=yuan

请求方式: get与post请求

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的请求体中.
  • GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制

响应状态码:状态码的职 是当客户端向服务器端发送请求时, 返回的请求 结果。借助状态码,用户可以知道服务器端是正常 理了请求,还是出 现了 。状态码如200 OK,以3位数字和原因组成。

2. requests&反爬破解

(1)UA反爬

在这里插入图片描述

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
}

res = requests.get(
    "https://www.baidu.com/",
    # headers=headers
)

# 解析数据
with open("baidu.html", "w") as f:
    f.write(res.text)

(2)referer反爬

在这里插入图片描述

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
    "Referer": "https://movie.douban.com/explore",
}

res = requests.get(
    "https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags=",
    headers=headers
)

# 解析数据
print(res.text)

(3)cookie反爬

在这里插入图片描述

import requests
url = "https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page=1&size=30&order=desc&orderby=percent&order_by=percent&market=CN&type=sh_sz"
cookie = 'xq_a_token=a0f5e0d91bc0846f43452e89ae79e08167c42068; xqat=a0f5e0d91bc0846f43452e89ae79e08167c42068; xq_r_token=76ed99965d5bffa08531a6a47501f096f61108e8; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTY5NTUxNTc5NCwiY3RtIjoxNjkzMjAzODIzMzAwLCJjaWQiOiJkOWQwbjRBWnVwIn0.MCIGGTGaSPe9nVuXkyrXQTlCthdURSnDtqm8dGttO2XYHeaMPSKmHQvsJmbw3OJTRnkf0KHZvgF0W3Rv-9uYe4P2Wizt0g2QzQonONjUmExABmZX0e3ara8BzBQ3b96H7dm0LV4pdBlnOW0A9PUmGRouWM7kVUOGPvd3X7GkB7M_th8pV8SZo9Iz4nzjrwQzxPBa0DlS7whbeNeXMnbnmAPp7z-eG75vdE2Pb3OyZ5Gv-FINhpQtAWo95lTxZVw5C5VHSzbR_-z8uqH6DD0xop4_wvKw5LIVwu6ZZ6TUnNFr3zGU9jWqAGgdzcKgO38dlL6uXNixa9mrKOd1OZnDig; cookiesu=431693203848858; u=431693203848858; Hm_lvt_1db88642e346389874251b5a1eded6e3=1693203851; device_id=7971eba10048692a91d87e3dad9eb9ca; s=bv11kb1wna; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1693203857'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
    "referer": "https://xueqiu.com/",
    "cookie": cookie,

}
res = requests.get(url, headers=headers)
print(res.text)

3. 请求参数

(1)get请求以及查询参数

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
    "Referer": "https://movie.douban.com/explore",
}

res = requests.get(
    "https://m.douban.com/rexxar/api/v2/movie/recommend?refresh=0&start=0&count=20&selected_categories=%7B%7D&uncollect=false&tags=",
    headers=headers,
    # params={  # 查询
    #    "count": "20",
    #    "tags": "悬疑"
    # }
)

# 解析数据
print(res.text)

(2)post请求以及请求体参数

在这里插入图片描述

在这里插入图片描述

import requests

while 1:
    wd = input("请输入翻译内容:")

    res = requests.post("https://aidemo.youdao.com/trans?", params={}, headers={},
                        data={
                            "q": wd,
                            "from": "Auto",
                            "to": "Auto"
                        })

    print(res.json().get("translation")[0])

4. 爬虫图片和视频

(1)直接爬取媒体数据流

在这里插入图片描述

import requests


# (1)下载图片
url = "https://pic.netbian.com/uploads/allimg/230812/202108-16918428684ab5.jpg"

res = requests.get(url)

# 解析数据
with open("a.jpg", "wb") as f:
    f.write(res.content)

# (2)下载视频

url = "https://vd3.bdstatic.com/mda-nadbjpk0hnxwyndu/720p/h264_delogo/1642148105214867253/mda-nadbjpk0hnxwyndu.mp4?v_from_s=hkapp-haokan-hbe&auth_key=1693223039-0-0-e2da819f15bfb93409ce23540f3b10fa&bcevod_channel=searchbox_feed&pd=1&cr=2&cd=0&pt=3&logid=2639522172&vid=5423681428712102654&klogid=2639522172&abtest=112162_5"

res = requests.get(url)

# 解析数据
with open("美女.mp4", "wb") as f:
    f.write(res.content)

(2)批量爬取数据

在这里插入图片描述

import requests
import re
import os

# (1)获取当页所有的img url
start_url = "https://pic.netbian.com/4kmeinv/"

res = requests.get(start_url)
img_url_list = re.findall("uploads/allimg/.*?.jpg", res.text)

print(img_url_list)

# (2)循环下载所有图片

for img_url in img_url_list:
    res = requests.get("https://pic.netbian.com/" + img_url)
    img_name = os.path.basename(img_url)

    with open(img_name, "wb") as f:
        f.write(res.content)

总结

如果这篇【文章】有帮助到你💖,希望可以给我点个赞👍,创作不易,如果有对前端端或者对python感兴趣的朋友,请多多关注💖💖💖,咱们一起探讨和努力!!!
👨‍🔧 个人主页 : 前端初见

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

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

相关文章

Ansible-playbook变量学习

目录 1.命令行变量赋值2.在playbook中赋值变量3.在ansible的清单文件&#xff08;/etc/ansible/hosts&#xff09;中定义普通变量4.在ansible的清单文件&#xff08;/etc/ansible/hosts&#xff09;中定义分组变量5.定义变量到一个文件中6.在执行playbook的目录创建 group_vars…

30个惊艳的数据可视化作品,让你感受“数据之美”!

‍ 在一个信息大爆炸的时代&#xff0c;每天都有很多的新消息、新发现、新趋势向我们狂轰乱炸而来。在这个过程中&#xff0c;我们既是数据的生产者&#xff0c;也是数据的使用者&#xff0c;然而初次获取和存储的原始数据总是杂乱无章的。 要想数据达到生动有趣、让人一目了…

【C++练习】leetcode刷题训练(中等难度)

【C练习】leetcode刷题训练(中等难度&#xff09; 1.数组中的第K个最大元素2.前K个高频单词3.单词识别4.字符串相乘5.只出现1次的数字Ⅱ6.栈的弹出压入序列 1.数组中的第K个最大元素 解题思路 1.典型的TOP-K问题(用堆来解决) 2.要求实现时间复杂度为O(N),而我们的优先级队列的时…

【附安装包】Alias AutoStudio2023安装教程

软件下载 软件&#xff1a;AutoStudio版本&#xff1a;2023语言&#xff1a;英文大小&#xff1a;4.81G安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.c…

《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL

Table API和SQL是最上层的API&#xff0c;在Flink中这两种API被集成在一起&#xff0c;SQL执行的对象也是Flink中的表&#xff08;Table&#xff09;&#xff0c;所以我们一般会认为它们是一体的。Flink是批流统一的处理框架&#xff0c;无论是批处理&#xff08;DataSet API&a…

2023年人工景点行业研究报告

第一章 行业概况 1.1 定义及分类 人工景点行业通常指的是设计和构建的为提供娱乐、教育或文化体验的景点。这些景点可能包括主题公园&#xff0c;博物馆&#xff0c;动物园&#xff0c;水族馆&#xff0c;科学中心&#xff0c;历史遗迹&#xff0c;艺术展览等。这个行业通常包…

rpm打包

文章目录 rpm打包 1. rpm打包步骤0&#xff09;安装打包工具rpm-build和rpmdevtools1&#xff09;创建初始化目录2&#xff09;准备打包内容3&#xff09;编写打包脚本 spec文件4&#xff09;打包5&#xff09;安装 rpm打包 1. rpm打包步骤 0&#xff09;安装打包工具rpm-buil…

python把txt变成list,并且写入xslx文件

需求&#xff1a; 1、把txt文件的内容变成list 2、然后写入excel中 txt文件内容 IP.txt 192.168.199.201,4C8G,200G 192.168.199.202,4C8G,200G 192.168.199.203,4C8G,200G 192.168.199.204,4C8G,200G 192.168.199.205,4C8G,200G192.168.199.206,4C8G,200G 192.168.199.207…

2023年7月京东笔记本电脑行业品牌销售排行榜(京东数据平台)

随着智能手机、平板电脑等移动互联设备的普及&#xff0c;人们对于个人电脑的依赖减轻&#xff0c;加之电脑的更换率较低&#xff0c;因此当前PC端消费市场整体出现疲态&#xff0c;笔记本电脑的出货量不断下降&#xff0c;今年7月份也同样呈现这一趋势。 根据鲸参谋电商数据分…

不使用 ERP有3个隐藏业务风险,一定要知道!

不少中小型企业出于种种原因&#xff0c;推迟了对ERP系统的投资。也许是因为没有一大笔钱购买软件&#xff1b;也许是听说实施项目可能需要几个月甚至几年的时间&#xff0c;而企业没有时间去做这种令人头疼的事情。 因此&#xff0c;中小企业并没有转向ERP系统&#xff0c;而…

运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi

运维Shell脚本小试牛刀(一) 运维Shell脚本小试牛刀(二) 运维Shell脚本小试牛刀(三)::$(cd $(dirname $0)&#xff1b; pwd)命令详解 运维Shell脚本小试牛刀(四): 多层嵌套if...elif...elif....else fi_蜗牛杨哥的博客-CSDN博客 一&#xff1a; if...elif...elif..else fi多层…

软件测试—测试用例的设计

软件测试—测试用例的设计 测试用例是什么&#xff1f; 首先&#xff0c;测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试系统提供的一组集合。这组集合包括&#xff1a;测试环境、操作步骤、测试数据、预期结果等要素。 好的测试用例的特征 一个好的测试…

ChatGPT 总结数据分析的所有知识点

ChatGPT功能非常多,特别是对某个行业,某个方向,某个技术进行总结那是相当专业的。 如下图。 直接用一个指令便总结出来数据分析当中的所有知识点内容。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Ex…

【python爬虫案例】用python爬豆瓣读书TOP250排行榜!

文章目录 一、爬虫对象-豆瓣读书TOP250二、python爬虫代码讲解三、讲解视频四、完整源码 一、爬虫对象-豆瓣读书TOP250 您好&#xff0c;我是 马哥python说 &#xff0c;一名10年程序猿。 今天我们分享一期python爬虫案例讲解。爬取对象是&#xff0c;豆瓣读书TOP250排行榜数…

2023-08-31 LeetCode每日一题(一个图中连通三元组的最小度数)

2023-08-31每日一题 一、题目编号 1761. 一个图中连通三元组的最小度数二、题目链接 点击跳转到题目位置 三、题目描述 给你一个无向图&#xff0c;整数 n 表示图中节点的数目&#xff0c;edges 数组表示图中的边&#xff0c;其中 edges[i] [ui, vi] &#xff0c;表示 ui…

暴力递归转动态规划(三)

前两篇暴力递归转动态规划的文章中&#xff0c;都是通过从上到下的一种思路来解决的问题&#xff0c;这篇文章会通过数组从左向右遍历的方式&#xff0c;来将暴力递归转成动态规划。 题目 有两个等长的数组 w[] 和 v[]&#xff0c;w[i] 和 v[i] 分别表示 i 号物品的重量和价值…

全球十大安全好用的黄金交易app软件最新排名(综合评测)

随着金融市场的不断发展&#xff0c;黄金交易app软件日益成为投资者不可或缺的工具。然而&#xff0c;面对众多的黄金交易软件&#xff0c;投资者往往感到困惑和难以抉择。本文将根据最新排名&#xff0c;对全球十大安全好用的黄金交易软件进行综合评测&#xff0c;帮助投资者找…

记一次Zip Slip任意文件写漏洞 以及一些参考文章

记一次Zip Slip任意文件写漏洞以及参考文章们 记一次Zip Slip任意文件写漏洞漏洞复现漏洞原理分析扩展延申 参考文章一&#xff1a;Java之解压流&#xff08;ZipInputStream&#xff09;参考文章二&#xff1a;Zip Slip VulnerabilityExploitable Application FlowAre you Vuln…

13.10 语义分割 全卷积网络

语义分割是对图像的每个像素分类 全卷积网络采用卷积神经网络实现从图像像素到像素类别的转换&#xff0c;全卷积网络将中间层特征的高和宽转换回输入图像的尺寸&#xff08;引入转置卷积实现的&#xff09;。 最终的类别预测与输入图像在像素上一一对应。 全卷积网络模型模型…

day 31 面向对象 成员方法

class 类名称&#xff1a; 类的属类(定义在类中的变量&#xff0c;成员变量) 类的行为(定义在类中的函数&#xff0c;成员方法) # 设计一个类&#xff08;类比生活中&#xff1a;设计一张等级表&#xff09; class Student:name Nonegender Nonenatio…