Python之爬取网站设计签名(一)

        你也许没学过python这门语言,也不懂python这门语言在爬取内容网站有多么的强悍!

        懂不懂这些似乎并没有那么重要!

        重要的是你看完这篇文章,你就会懂得简单的网页爬取技术!

        今天在这里我就手把手教会一个小白是如何去用python爬取网页内容!

        第一步,新建项目名为Sign

         第二步,在项目Sign>.idea文件夹下添加sign.py文件

        第三步,先把爬取网页内容需要用到的模块先添加进来,这些模块分别有什么作用,在这里先不做解释,等用到的时候会在下文解释有何作用


        这些我们都准备好了,接下来我们就去寻找一个目标,我寻找到的是一个签名设计的网址,http://www.jiqie.com/a/14.htm,首先打开这个网址如下图所示:注意(我用的是火狐浏览器)

我输入“目标”两个字>按“F12”>然后点击“给我设计”,就会发现以下我们感兴趣的内容

发现点击“给我设计”的时候会向该网址:http://www.jiqie.com/a/re14.php 发送POST请求,到这里了我们看看发送POST请求时会像该网址发送什么参数呢?

参数找到了。

        接下来我们就该用代码模拟浏览器发送POST请求获取我们感兴趣的东西了,那我们就回到写代码的步骤了,

        首先写代码模拟浏览器发送POST请求,得要确定两个目标,第一个是发送POST请求的网址,第二发送

        POST请求时是要用到的参数,

        这里的网址是 :http://www.jiqie.com/a/re14.php

       参数是:

         

data = {
    'id':'目标',
    'id1':'905',
    'id2':'14',
    'id3':'#0000FF',
    'id4':'',
    'id5':'',
    'id6':'',
    'idi':'jiqie'
    }
在这里我们把需要发送的参数定义为数据字典的形式进行发送
import requests
import re
from typing import Any

postUrl = "http://www.jiqie.com/a/re14.php"#发送POST请求网址
data = {
    'id':'目标',
    'id1':'905',
    'id2':'14',
    'id3':'#0000FF',
    'id4':'',
    'id5':'',
    'id6':'',
    'idi':'jiqie'
    }
result = requests.post(postUrl, data=data)
print(result)

到这里我们运行代码返回给我们的是一个“200”的状态码!这表示我们模拟浏览器发送POST请求成功了!

既然请求成功了,我们就先回浏览器看下请求成功了,然后给我们返回的东西是什么

查看HTML元素我们发现图片的链接在这里<img src="../i/21/1255.jpg?042421381721848">,看到这个链接我们可以知道了该图片的真正链接地址是:
http://www.jiqie.com/i/21/1255.jpg?042421381721848

既然知道了图片的链接地址那么我们又回到代码部分

到这里我们应该用正则去匹配我们想要的东西了,因为我们想要的是“/i/27/1804.jpg?042422204314887”这个而已,
但是返回给我们的却是“<img src="../i/27/1804.jpg?042422204314887">”,所以在这里我们得用正则去匹配我们想要的东西

到这里一个爬取网址内容的流程就算是完成了!
    但是我们如何把我们爬取下来的图片保存起来呢!通过打印我们发现下载回来得到的图片数据是二进制的


所以我们保存图片的方式是一定是 f=open('第一次.gif','wb'),第二个参数一定是'wb'表示字节流的意思
'wb'


 
文件保存下来了,我们去看看“第一次.gif”是不是被保存下来了


你呢有没有学会?没学会的可以加QQ:761516331一起学习!
下来给源码
import requests
import re
from typing import Any

postUrl = "http://www.jiqie.com/a/re14.php"#发送POST请求网址
data = {
    'id':'目标',
    'id1':'905',
    'id2':'14',
    'id3':'#0000FF',
    'id4':'',
    'id5':'',
    'id6':'',
    'idi':'jiqie'
    }
result = requests.post(postUrl, data=data)#在这里我们使用到了import requests 第一个引用的模块
print(result)
result.encoding='utf-8'#编码方式,不用会出现乱码
html=result.text  # 获取发送post请求时,返回的页面内容     type:Any 这里我们用到了from typing import Any 第三个引用的模块
print(html)

reg='<img src="..(.*?)">'
imagePath=re.findall(reg,html)  #正则匹配 在这里我们使用到了import re 第二个引用的模块
print(imagePath)# ['/i/80/1605.jpg?042422322114249']
print(imagePath[0])# /i/80/1605.jpg?042422322114249
imageUrl="http://www.jiqie.com"+imagePath[0] #拼接获取到发送post请求时返回的正真链接地址 http://www.jiqie.com/i/80/1605.jpg?042422322114249
response=requests.get(imageUrl).content #根据链接下载内容
print(response)
f=open('第一次.gif','wb')
f.write(response)
f.close()
今天是我第一次写博客写得不够好,这博客我写了两个多小时,以后我会好好努力的!如果有什么写得不对的地方望各位兄弟姐妹告知,小弟一定会改!



         

          

### 使用 Python 实现百度翻译爬虫 以下是基于提供的参考资料实现的个完整的 Python 爬虫代码,用于调用百度翻译 API 并完成文本翻译功能。此代码涵盖了从发送请求到解析返回数据的全过程。 #### 总体流程说明 1. 导入所需库。 2. 用户输入待翻译的文字。 3. 构建请求 URL 和 POST 数据。 4. 发送 HTTP 请求至百度翻译服务端。 5. 接收并解析服务器返回的结果。 6. 输出最终翻译结果。 下面是具体实现: ```python import hashlib import random import time import requests def generate_sign(query, appid, salt, secret_key): """生成签名""" sign_str = f"{appid}{query}{salt}{secret_key}" md5 = hashlib.md5() md5.update(sign_str.encode('utf-8')) return md5.hexdigest() def translate_text(appid, secret_key, query, from_lang="en", to_lang="zh"): """翻译函数""" url = "https://fanyi-api.baidu.com/api/trans/vip/translate" salt = str(random.randint(32768, 65536)) timestamp = str(int(time.time())) sign = generate_sign(query, appid, salt, secret_key) payload = { 'q': query, 'from': from_lang, 'to': to_lang, 'appid': appid, 'salt': salt, 'timestamp': timestamp, 'sign': sign } headers = {'Content-Type': 'application/x-www-form-urlencoded'} response = requests.post(url, data=payload, headers=headers) result = response.json() if 'error_code' in result and result['error_code'] != '0': raise Exception(f"Translation failed with error code: {result.get('error_code')}, message: {result.get('error_msg')}") translated_texts = [item['dst'] for item in result.get('trans_result', [])] return translated_texts if __name__ == "__main__": # 替换为您的实际 App ID 和 Secret Key APP_ID = "your_app_id_here" SECRET_KEY = "your_secret_key_here" text_to_translate = input("请输入要翻译的文本:") try: translations = translate_text(APP_ID, SECRET_KEY, text_to_translate) print("翻译结果:", "\n".join(translations)) except Exception as e: print(e) ``` #### 关键点解释 - **签名生成**:为了防止恶意访问,百度翻译 API 要求每次请求都附带个由特定算法计算得出的有效签名[^1]。 - **UA伪装**:某些情况下,目标站点可能会检测客户端的身份标识 (User-Agent),因此可以通过设置合适的 User-Agent 来模拟浏览器行为,从而绕过反爬机制[^2]。 - **错误处理**:当网络异常或者参数不正确时,API 可能会返回错误信息;这里增加了基本的异常捕获逻辑以便更好地调试问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值