1.问题.
response = requests.get(url)
if response.status_code == 200:
content = response.text
url输出内容conten中文t乱码;
原因:编码错误
解决:引入
# -*- coding: utf-8 -*-
response = requests.get(url)
response.encoding = 'utf-8'
2.re.search()
函数:
在Python的re
模块中,re.search()
函数用于在字符串中搜索正则表达式的匹配项。如果找到匹配项,则返回一个匹配对象;如果没有找到,则返回None
。
当使用re.search()
函数在字符串中搜索正则表达式模式时,如果找到匹配项,re.search()
将返回一个Match
对象。这个Match
对象包含有关匹配的信息,例如匹配文本的位置和内容。
你可以通过几种方式从Match
对象中获取匹配的内容:
Match.group()
:返回匹配的文本。Match.start()
:返回匹配文本的开始位置(索引)。Match.end()
:返回匹配文本的结束位置(索引)。Match.span()
:返回一个元组(start, end)
,其中包含匹配文本的开始和结束位置。
输入excal表格,有一个url的列,代码从第4行开始
完整代码:
# -*- coding: UTF-8 -*-
import pandas as pd
import requests
import re
# 读取Excel文件
excel_path = 'keyfilter.xlsx'
df = pd.read_excel(excel_path, sheet_name='Sheet1', skiprows=2) # 从第四行开始读取
# 关键词列表的正则表达式
keyword_patterns = [
r'KP\S{1,20}计划',
r'国家\S{1,20}计划',
r'省级\S{1,20}计划',
r'启明',
r'火炬',
r'讲席',
r'千人',
r'长江学者',
r'海外引才计划',
r'万人'
]
# 存储匹配的关键字和网址的列表
matched_data = []
# 遍历每个网址,检查是否包含关键词
for index, row in df.iterrows():
url = row['网址']
try:
response = requests.get(url)
response.encoding = 'utf-8'
if response.status_code == 200:
content = response.text
# print(content)
for pattern in keyword_patterns:
# print(url)
res = re.search(pattern, content)
if res:
print(res.group())
matched_data.append({'网址': url, '关键词': res.group()})
# break # 找到一个关键词就停止检查,避免重复
except requests.exceptions.RequestException as e:
print(f"请求 {url} 时发生错误: {e}")
# 将结果保存到新的Excel文件
matched_df = pd.DataFrame(matched_data)
# matched_df.to_excel('keyfilter_output.xlsx', index=False)
# 使用groupby对网址进行分组,然后使用agg函数合并关键词
merged_df = matched_df.groupby('网址')['关键词'].apply(lambda x: ', '.join(x)).reset_index()
# 将结果保存到新的Excel文件
merged_df.to_excel('keyfilter_output.xlsx', index=False)