python-实战

python

第二个python爬虫-爬词典有点坑

25分钟的视频本喵看了好久,主要是对着看了会纯英文Python docs!满心欢喜地开始爬有道词典,结果呵呵了。喵了个咪的,先把代码摆上再解释。

源码:

import urllib.request	
import urllib.parse	
import json

#定义url
url = 'http://fy.iciba.com/ajax.php?a=fy'	

#构造data
string = input('请输入您要翻译的中文:')
data = {}
data['f'] = 'auto'
data['t'] = 'auto'
data['w'] = string
data = urllib.parse.urlencode(data).encode('utf-8')	#修改编码方式,否则会产生错误

#爬虫
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')	#解码utf-8,返回的是序列的字符串形式

#读取字符串,载入字典,利用索引找到翻译结果
target = json.loads(html)
print(target['content']['out'])

运行结果:


>>> 
请输入您要翻译的中文:我喜欢你
I like you
>>> 

学习:

思路:

这次爬虫本质上还是利用url打开网页,但是在爬虫的时候携带了data:urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False),我们看过关于urllib.request文档后注意到:

  • url 可以是 string 或一个 Request 对象。 Request 对象可以通过 urllib.request.Request(url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)得到。
>>> req = urllib.request.Request('https://www.baidu.com')
>>> response = urllib.request.urlopen(req)
  • 大多数情况下request会返回一个response对象,他的method包括geturl(),info(),getcode(),可以用来获取http相关信息
  • 当HTTP携带data时,使用的是post而不是get方法
  • data 是由格式要求的:application/x-www-form-urlencoded ,urllib.parse.urlencode可以帮我们将key-value的数据转化成该格式字符串

伪造请求报文(我是这样理解的):

首先我们需要找到url和data的格式,这里使用的是金山词典,报文简单。有道词典的data部分有点复杂,有些值我找不到方法去伪造。

打开金山词典网页,翻译一句话,利用开发者选项找到post报文:

找到标头中的请求url
找到标头中的请求url
找到请求正文即data部分
找到请求正文即data部分
然而有道词典的data部分是这样的,呵呵,还有时间戳、随机数一堆一堆的
有道词典的data部分

我们利用字典记录data的数据:
data = {}
data['f'] = 'auto'
data['t'] = 'auto'
data['w'] = ’我爱你‘
格式化data为standard format:
data = urllib.parse.urlencode(data).encode('utf-8')	

parse解析
parse用法链接
没学,不好解释,下次用的时候补上!

爬虫:
response = urllib.request.urlopen(url,data)
html = response.read().decode('utf-8')	

爬虫结果实际上是一个字符串:

>>> 
>>> response = urllib.request.urlopen(url,data)
>>> html = response.read().decode('utf-8')
>>> print(html)
{"status":1,"content":{"from":"zh-CN","to":"en-US","out":"I love you","vendor":"ciba","err_no":0}}
>>> type(html)
<class 'str'>
>>> 
将爬虫结果转为字典,便于我们想要的数据即翻译结果:
target = json.loads(html)

json
JSON本身是一种轻量级的数据交换格式,这里我们利用python中内置的module实现对字符串中的内容进行读取。
没学,不好解释,下次用的时候补上

>>>
>>> target = json.loads(html)
>>> print(target)
{'status': 1, 'content': {'err_no': 0, 'out': 'I love you', 'from': 'zh-CN', 'to': 'en-US', 'vendor': 'ciba'}}
>>> type(target)
<class 'dict'>
>>> 
输出翻译结果
print(target['content']['out'])

当然,你也可以用字符串查找之类的,不过太麻烦了

备注_学习来源:

-哔哩哔哩:[小甲鱼]零基础入门学习Python

第二个Python爬虫-end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka 是一个高性能、分布式的消息队列,常用于处理大量的实时数据。Python-Kafka 是 Python 语言的 Kafka 客户端库,提供了丰富的 API 接口,可以方便地对 Kafka 进行操作。下面是一个 Python-Kafka 的实战案例: 1. 安装 Python-Kafka 库 使用 pip 安装 Python-Kafka 库: ``` pip install kafka-python ``` 2. 创建 Kafka 生产者 使用 Python-Kafka 库创建 Kafka 生产者,代码如下: ```python from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers=['localhost:9092']) for i in range(10): producer.send('test', b'message {}'.format(i)) producer.close() ``` 上述代码创建了一个 Kafka 生产者,并向名称为“test”的主题发送了 10 条消息。 3. 创建 Kafka 消费者 使用 Python-Kafka 库创建 Kafka 消费者,代码如下: ```python from kafka import KafkaConsumer consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092']) for msg in consumer: print(msg) consumer.close() ``` 上述代码创建了一个 Kafka 消费者,并订阅了名称为“test”的主题。当 Kafka 生产者向该主题发送消息时,消费者将接收到消息并打印出来。 4. 手动提交消费偏移量 默认情况下,Kafka 消费者会自动提交消费偏移量,但在某些情况下需要手动提交。例如,在消费者处理消息之前需要进行一些预处理或验证操作时,可以先手动提交偏移量,再进行处理。代码如下: ```python from kafka import KafkaConsumer consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092'], enable_auto_commit=False) for msg in consumer: print(msg) consumer.commit() consumer.close() ``` 上述代码创建了一个 Kafka 消费者,并禁用了自动提交消费偏移量的功能。在每次处理完消息后,需要手动提交偏移量。 5. 多线程消费 在实际应用中,可能需要启用多个消费者线程来提高消息处理效率。可以使用 Python 的 threading 模块创建多个线程,每个线程创建一个 Kafka 消费者来消费消息。代码如下: ```python from kafka import KafkaConsumer import threading def consume(): consumer = KafkaConsumer('test', bootstrap_servers=['localhost:9092']) for msg in consumer: print(msg) consumer.close() threads = [] for i in range(4): t = threading.Thread(target=consume) threads.append(t) t.start() for t in threads: t.join() ``` 上述代码创建了 4 个消费者线程,每个线程创建一个 Kafka 消费者并消费消息。这样可以提高消息处理效率。 以上就是一个简单的 Python-Kafka 实战案例,通过该案例可以了解如何使用 Python-Kafka 库创建 Kafka 生产者和消费者,以及如何手动提交消费偏移量和使用多线程消费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值