import requests
from bs4 import BeautifulSoup
import openpyxl
search_url = 'https://cn.investing.com/search/?q='
# 添加头部
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36'
}
# 打开Excel表格
wb = openpyxl.load_workbook(r'C:\Users\win10\Desktop\2.xlsx')
sheet = wb['Sheet1']
# 遍历企业名称列,获取相应的信息
for row in sheet.iter_rows(min_row=2, values_only=True):
company_name = row[0] # 假设企业名称在第一列
# 搜索企业
query_url = f'{search_url}{company_name}'
print(query_url)
response = requests.get(query_url,headers=headers)
soup = BeautifulSoup(response.content, 'html.parser')
# 获取跳转链接
quote_link = soup.xpath('//a[@class="js-inner-all-results-quote-item row"]/@href')[0]
quote_response = requests.get(quote_link,headers=headers)
quote_soup = BeautifulSoup(quote_response.content, 'html.parser')
profile_link = quote_soup.select('li')[-2]['href']
profile_response = requests.get(profile_link,headers=headers)
profile_soup = BeautifulSoup(profile_response.content, 'html.parser')
# 获取企业简介
profile_desc = profile_soup.select_one('#profile-fullStory-showhide').get_text(strip=True)
# 获取企业地址
address_spans = profile_soup.select('div.companyAddress span.float_lang_base_2.text_align_lang_base_2.dirLtr')
address_texts = [span.get_text(strip=True) for span in address_spans]
address = ''.join(address_texts)
# 获取电话
phone_span = profile_soup.select_one('div.companyPhone span.float_lang_base_2.text_align_lang_base_2.dirLtr')
phone = phone_span.get_text(strip=True) if phone_span else ''
# 获取网址
web_span = profile_soup.select_one('div.companyWeb span.float_lang_base_2.text_align_lang_base_2.dirLtr')
web = web_span.get_text(strip=True) if web_span else ''
# 将获取到的信息添加到Excel表格对应的列中
row_index = sheet.find(company_name).row # 找到企业名称所在的行
sheet.cell(row=row_index, column=11, value=profile_desc) # 假设企业简介需要写入
sheet.cell(row=row_index, column=10, value=address) # 假设企业地址需要写入
sheet.cell(row=row_index, column=7, value=phone) # 假设电话需要写入
sheet.cell(row=row_index, column=9, value=web) # 假设网址需要写入
# 保存Excel表格
wb.save(r'C:\Users\win10\Desktop\2.xlsx')
首先,代码定义了一个 search_url
变量,然后通过 openpyxl
库读取本地的 Excel 表格文件并打开表格中的某个工作表(Sheet1
)。
接着,代码将遍历 Excel 表格的每一行,并获取该行的第一个单元格(也就是企业名称),然后将企业名称作为搜索关键字发送请求到 Investing.com 的搜索页面。然后将返回的搜索结果解析为 HTML 后,从中提取出跳转链接,该链接指向包含该企业详细信息的页面。
接下来,代码在获取到企业详细信息页面的链接之后,再次发送请求并解析该页面。从中获取企业的地址、电话、网址等信息。最后,将获取到的信息写入到 Excel 表格的对应列中。
需要注意的是,对于一些企业信息可能无法获取或者获取不全的情况,代码使用了一些条件语句和异常处理机制来防止程序崩溃。此外,代码还添加了一些请求头信息,以防止被服务器识别为爬虫并拒绝访问。