Python爬虫 —— 百度翻译

 
 
 
 
 
 
 
 

基本信息

爬虫测试时间:2020年7月29日

爬虫目标网站:百度翻译(https://fanyi.baidu.com/?aldtype=16047#auto/zh

 
 
 
 

网站基本信息

在这里插入图片描述

键入要翻译的关键字后,页面局部刷新(依旧使用的是 AJAX)
在这里插入图片描述

1、数据抓包,进入XHR页面获取AJAX实际的请求地址及相关参数

在这里插入图片描述

2、看几个响应,分析请求的规律

在这里插入图片描述
在这里插入图片描述
找到k是china的那个请求,可以看到 请求url、请求方式 和 返回的数据类型 都有了
在这里插入图片描述

继续往下看,post传出的是什么样的数据。最下方可以看到传出数据的形式为 key —> kw, value —> china
在这里插入图片描述

3、编写个代码测试一下(此步可跳过,下面代码为不完全版本,只是为了引导思路)

import requests
from bs4 import BeautifulSoup
import os

baseurl = 'https://fanyi.baidu.com/sug'

ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' \
     ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

para = {
    'query': 'python'
}

data = {
    'kw': 'dog'
}

res = requests.post(baseurl, headers={'User-Agent': ua}, data=data)


saveDir = './爬虫数据存储/百度翻译'
saveData = '百度翻译'
extName = 'json'

if res.status_code == 200:
    print(res.text)
    if not os.path.exists(saveDir):
        os.mkdir(saveDir)
    with open(os.path.join(saveDir, saveData + '.' + extName), 'w', encoding='utf-8') as f:
        f.write(res.text)

可以看到返回的数据如下:
在这里插入图片描述
上图中的 v 都是 \uxxx的形式,使用urllib解析字符,可以看到返回的结果就是翻译的结果

在这里插入图片描述

4、一个一个的解析这些字符也很麻烦,此处既然返回的直接试json数据,则调用 requests.json() 直接将响应的json字符串 读入为 python 字典,可以看到结果数据已经成功被解析了
在这里插入图片描述

5、整体代码如下:

import requests
from bs4 import BeautifulSoup
import os
import json

baseurl = 'https://fanyi.baidu.com/sug'

ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' \
     ' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'

para = {
    'query': 'python'
}

data = {
    'kw': 'dog'
}

res = requests.post(baseurl, headers={'User-Agent': ua}, data=data)


saveDir = './爬虫数据存储/百度翻译'
saveData = '百度翻译'
extName = 'json'

if res.status_code == 200:
    print(res.text)
    if not os.path.exists(saveDir):
        os.mkdir(saveDir)
    with open(os.path.join(saveDir, saveData + '.' + extName), 'w', encoding='utf-8') as f:
        # 注意此处使用json.dumps() 一定要把属性 ensure_ascii 设置为 False,否则中文无法正常解码
        f.write(json.dumps(res.json(), ensure_ascii=False))

6、将上述代码按需封装,在辅以gui则可实现“自己的”翻译器了

Python爬虫应用于抓取百度图片通常涉及使用第三方库如`requests`, `BeautifulSoup` 或者 `Scrapy`框架。以下是基本步骤: 1. **导入所需库**: 首先,你需要安装`requests`库来发送HTTP请求,以及可能需要的如`bs4`(BeautifulSoup4)用于解析HTML内容。 ```python import requests from bs4 import BeautifulSoup ``` 2. **发送GET请求**: 使用`requests.get()`函数获取百度图片搜索结果的网页源码。 ```python url = 'https://image.baidu.com/search/index?tn=baiduimage&ipn=r&ct=201326592&cl=2&lm=-1&stc=1&fr=&sf=1&fmq=1689375560990_R&pv=&ic=0&nc=1&z=&word=' + keyword response = requests.get(url) ``` 这里`keyword`是你想要搜索的图片关键字。 3. **解析HTML**: 使用BeautifulSoup解析返回的HTML,找到包含图片URL的部分。这通常涉及到查找`<img>`标签的`src`属性。 ```python soup = BeautifulSoup(response.text, 'lxml') img_tags = soup.find_all('img', src=True) # 查找所有有src属性的<img>元素 ``` 4. **提取图片URL**: 循环遍历`img_tags`,提取每个图片链接。 ```python image_urls = [img['src'] for img in img_tags] ``` 5. **保存图片**: 可以使用`requests`库下载图片到本地,如果图片地址是HTTP的话。记得处理可能出现的网络错误。 ```python for url in image_urls: try: response = requests.get(url, stream=True) with open(f'{keyword}_{i}.jpg', 'wb') as f: for chunk in response.iter_content(chunk_size=1024): if chunk: # filter out keep-alive new chunks f.write(chunk) except Exception as e: print(f"Failed to download {url}: {e}") ``` 6. **注意事项**: - 爬虫操作需遵守百度的robots.txt规则,并尊重版权,合理使用抓取数据。 - 实际操作可能会遇到反爬虫策略,可能需要设置延迟、用户代理等。 - 如果需要大规模抓取,最好使用Scrapy等专业的爬虫框架。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值