{"status":200,"message":"操作成功","data":"https://www.5iai.com:444/logout?redirect=http://www.5iai.com"}
时间: 2023-08-11 17:05:35 浏览: 178
这是一个JSON格式的字符串,包含了一个HTTP响应的信息。其中,status字段表示HTTP状态码,200表示成功;message字段表示响应的消息,这里是"操作成功";data字段表示响应的数据,这里是一个URL链接。在这个URL中,":444"表示端口号,"logout"是一个操作,"redirect"参数指定了重定向的目标URL,在这个例子中是"http://www.5iai.com"。可能是一个注销登录的链接,点击后会跳转到指定的目标URL。
相关问题
优化代码import json import requests from lxml import etree import pandas as pd import time #url='https://www.ptpress.com.cn/masterpiece/getMasterpieceListForPortal' #https://www.ptpress.com.cn/recommendBook/getRecommendTupeListForPortal #http://www.ptpress.com.cn/masterpiece/getMasterpieceListForPortal url='https://www.5iai.com/api/enterprise/job/public/es?pageSize=10&pageNumber=1'#目标数据文件的url #url = ' https://www.5iai.com/api/enterprise/job/public/es?pageSize=10&pageNumber=2&willNature=&function=&wageList=%255B%255D&workplace=&keyword=' for i in range (1,20): response=requests.get(url) aa=response.text print(type(aa)) json_text=json.loads(aa) print(type(json_text)) json_text.keys() bb=json_text['data'] print(type(bb)) print(bb.keys()) cc= bb['content'] print(type(cc)) ee0=cc[0] #是第一条信息 ee1=cc[1] len(cc)#是cc的第一个招聘的第一页招聘信息,是列表类型 print(type(ee0)) ee0.keys() ee1.keys()#0和1的的字典的键都是一样的 data=pd.DataFrame(cc) data.columns ff=data['enterpriseAddress'] print(type(ff)) gg0=ff[0] gg1=ff[1] hh0=gg0['detailedAddress'] hh1 = gg1['detailedAddress'] hh3= ff[2]['detailedAddress'] hh4= ff[3]['detailedAddress'] hh5=data['enterpriseAddress'] [4]['detailedAddress'] data['工作地址']=ff.apply(lambda x:x['detailedAddress']) data['工作地址']=data['enterpriseAddress'].apply(lambda x:x['detailedAddress']) data['工作城市']=data['enterpriseAddress'].apply(lambda x:x['cityCode']) kk=data['enterpriseExtInfo'] print(type(kk)) ll0=kk[0] data['公司名称']=data['enterpriseExtInfo'].apply(lambda x:x['shortName']) data['行业']=data['enterpriseExtInfo'].apply(lambda x:x['industry']) data['人员规模']=data['enterpriseExtInfo'].apply(lambda x:x['personScope']) data['企业性质']=data['enterpriseExtInfo'].apply(lambda x:x['econKind']) data.keys() colNames=['positionName','minimumWage','maximumWage','exp','educationalRequirements','工作地址','工作城市','公司名称','行业','人员规模','企业性质'] data_drop=data[colNames] #https: // www.5iai.com / api / enterprise / job / public?id = 1657941238357299201 #https: // www.5iai.com / api / enterprise / job / public?id = 1657941238353104896 data['id'] #print(type(data['id'])) #suburl='https://www.5iai.com/api/enterprise/job/public?id=1657941238353104896' jobDes = [] for idd in data['id']: suburl = 'https://www.5iai.com/api/enterprise/job/public?id={}'.format(idd) sub_response=requests.get(suburl) subb=sub_response.text #print(type(subb)) sub_text=json.loads(subb) #print(type(sub_text)) sub_text.keys subaa=sub_text['data'] #print(type(subaa)) subaa.keys jobms=subaa['jobRequiredments'] #print(type(jobDes)) jobDes.append(jobms) time.sleep(2) data_drop['职位描述']=jobDes
好的,以下是优化后的代码:
```python
import json
import requests
import pandas as pd
import time
url = 'https://www.5iai.com/api/enterprise/job/public/es?pageSize=10&pageNumber={}' # 目标数据文件的url
data_list = [] # 用于存放所有爬取到的数据
for i in range(1, 20):
response = requests.get(url.format(i))
json_text = json.loads(response.text)
content = json_text['data']['content']
data_list.extend(content)
time.sleep(2)
jobDes = [] # 用于存放职位描述
for data in data_list:
suburl = 'https://www.5iai.com/api/enterprise/job/public?id={}'.format(data['id'])
sub_response = requests.get(suburl)
sub_text = json.loads(sub_response.text)
jobDes.append(sub_text['data']['jobRequiredments'])
time.sleep(2)
# 将数据存入DataFrame中
data = pd.DataFrame(data_list)
data['职位描述'] = jobDes
# 选择需要的列
colNames = [
'positionName', 'minimumWage', 'maximumWage', 'exp', 'educationalRequirements',
'enterpriseAddress', 'enterpriseExtInfo'
]
data_drop = data[colNames]
# 对企业地址和扩展信息进行处理
data_drop['工作地址'] = data_drop['enterpriseAddress'].apply(lambda x: x['detailedAddress'])
data_drop['工作城市'] = data_drop['enterpriseAddress'].apply(lambda x: x['cityCode'])
data_drop['公司名称'] = data_drop['enterpriseExtInfo'].apply(lambda x: x['shortName'])
data_drop['行业'] = data_drop['enterpriseExtInfo'].apply(lambda x: x['industry'])
data_drop['人员规模'] = data_drop['enterpriseExtInfo'].apply(lambda x: x['personScope'])
data_drop['企业性质'] = data_drop['enterpriseExtInfo'].apply(lambda x: x['econKind'])
# 将职位描述放在最后一列
data_drop = data_drop[['positionName', 'minimumWage', 'maximumWage', 'exp', 'educationalRequirements',
'工作地址', '工作城市', '公司名称', '行业', '人员规模', '企业性质', '职位描述']]
print(data_drop.head()) # 打印前五行数据
```
代码中主要的优化包括:
1. 将爬取数据和处理数据分开,使代码更加清晰易懂。
2. 在爬取时引入延时,防止爬取过于频繁被网站封禁。
3. 将爬取和处理数据的过程封装到循环中,一次性爬取所有数据,避免多次请求。
4. 用 `extend` 方法将每页数据合并到一个列表中,避免了多次拼接数据带来的额外开销。
5. 对企业地址和扩展信息进行处理时,使用 `apply` 方法,避免了使用循环带来的额外开销。
这样,代码的可读性和可维护性都得到了提高。
代码如下: import requestsfrom lxml import etreeimport numpy as npheaders = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36", "Referer": "https://www.5iai.com/", "Origin": "https://www.5iai.com"}url = "https://www.5iai.com/api/job/list"response = requests.get(url, headers=headers)response.encoding = 'utf8'html = response.textroot = etree.HTML(html)node_list = root.xpath('//div[@class="jobInfo"]/a/text()')print(node_list)np.savetxt('daijing_list.txt', node_list, fmt='%s')
在你的代码中,你使用了requests和lxml库,向https://www.5iai.com/api/job/list发送了一个GET请求,以获取一个JSON格式的响应。然后,你将响应文本转换为了HTML文本,并使用XPath表达式从中提取了一些文本信息。最后,你将这些文本信息保存到了名为daijing_list.txt的文件中。
然而,根据你提供的代码,我无法确定为什么不能成功爬取数据。有几个可能的原因是:
1. URL不正确:确保URL链接正确,没有任何拼写错误或其他错误。
2. 网站反爬虫机制:网站可能已经采取了反爬虫机制,例如IP封锁、验证码、用户代理检测等。你可以尝试更改请求头来模拟正常的用户行为,以规避这些机制。
3. 爬取的数据不存在:检查XPath表达式是否正确,以确保你正在正确地解析HTML文本,并且正在获取正确的数据。
4. 网络连接问题:在某些情况下,网络连接可能会中断或失败,导致你无法成功爬取数据。你可以尝试使用try-except语句来处理这些异常情况,并重新尝试请求。
希望这些提示可以帮助你找到问题所在。
阅读全文
相关推荐














