import requests # 数据请求模块
import re # 正则表达式模
import json # 序列化与反序列化
import pprint # 格式化输出
url ='https://www.58.com/caiwu/?qq-pf-to=pcqq.c2c'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.50'}
response = requests.get(url=url,headers=headers)
#print(response.text)
name_data= re.findall('target="_blank" class="t">(.*?)</a></td>',response.text)
print(name_data)
xinzi_data = re.findall('style="width:100px">(.*?) </td>',response.text)
#print(xinzi_data)
flexiple =[name_data]
f1 = ""
for i in flexiple:
f1 += str(i)+ " "
str_name_data = " ".join(name_data)
print(type(str_name_data))
flexiple =[xinzi_data]
f2 = ""
for i in flexiple:
f2 += str(i)+ " "
str_xinzi_data = " ".join(xinzi_data)
#print(type(f1))
#print(type(f2))
New = '{"str_name_data" : "str_xinzi_data"}'
print(New)
b = eval(New)
print(b, type(b))
pprint.pprint(b)
这是我的代码,想把两个爬取出来的字符串里面的内容连接起来并转化为字典,但是好像只连接到了标题,里面的内容没连接起来,想请问一下这个问题如何解决
你直接 New = {str_name_data : str_xinzi_data} 不就好了?干嘛加上引号再用eval?
方法 | 描述 |
---|---|
read() | 从指定文件中读取指定字节的数据 |
readline() | 从指定文件中读取一行数据 |
readlines() | 从指定文件中的数据一次读出,并将每一行视为一个元素,存储到列表中。 |
😊 到了写代码环节,兄弟们操练起来。耍 ! 耍 ! 整起 !
file = open('a.txt','r')
#读文件
#str_ = file.read(5) # 读取五个字符
#print(str_)
#readline
# str2 = file.readline()
# print(str2) # 第1次读取 读取第一行
# str3 = file.readline()
# print(str3) # 第二次读取 读取第二行
#readliness
str4 = file.readlines()
print(str4) # 返回的是一个列表
file.close()
针对问题,以下是解决方案:
在Python中将两个字符串连接为字典,可以使用json库将字符串转换为json格式,然后再将json格式转换为字典。需要注意的是,字符串转为json格式时需要符合json格式的要求,即需要使用双引号来表示字符串。以下是具体的代码实现:
import json if name == 'main': str1 = "{'name': 'Tom', 'age': 18}" # 原始的字符串1 str2 = '{"sex": "male", "address": "Beijing"}' # 原始的字符串2 str1_json = json.loads(str1.replace("'",'"')) # 将字符串1转为json格式 str2_json = json.loads(str2) # 将字符串2转为json格式 result = {str1_json, str2_json} # 将两个字典合并 print(result)
其中,json.loads()函数用于将json格式的字符串转为Python对象,{x, y}用于将两个字典合并。
需要注意的是,在将字符串1转换为json格式时,需要将单引号替换为双引号,因为json格式中只有双引号有效。
另外,在合并字典时,如果两个字典有重复的键值对,后一个字典的值会覆盖前一个字典的值。如果不需要覆盖,可以使用字典的update()方法进行合并。
对于以上代码,我们还可以进行进一步的优化,将其封装为函数,并添加类型注解和异常处理等,以提高函数的健壮性和可读性。具体代码实现如下:
import json from typing import Dict
def connect_strings(str1: str, str2: str) -> Dict: try: str1_json = json.loads(str1.replace("'",'"')) str2_json = json.loads(str2) result = {str1_json, str2_json} return result except (json.JSONDecodeError, TypeError) as e: print("Error:", e) return {}
其中,使用了类型注解和异常处理,当字符串无法转为json格式时,会捕获异常并返回空字典。在代码实际运行时,可以根据具体情况进行适当的调整。