这个时当时给某位朋友爬一些企业的名字,和一个我不知道的字段。在通过企信网查询。
from numpy import nanfrom pandas.core.frame import DataFramefrom selenium import webdriverimport pandas as pdfrom selenium.webdriver.common.keys import Keys # 键盘按键import numpy as npimport pdb
首先是实例化一个操作浏览器的driver,需要给到相应的驱动文件,就是之前下载的那个。
browser = webdriver.Chrome(executable_path='chromedriver.exe')browser.get('https://www.qixin.com/search?key=中国工商银行&page=1')data_frame = pd.read_csv('companies.csv')name_list = data_frame['品牌名称'].to_list()result_list = data_frame['工商注册企业名称'].to_list()eid_list = data_frame['eid'].to_list()result = data_frame['工商注册企业名称'].isna().to_numpy()start_idx = (~result).sum()print('start from {}'.format(start_idx))pdb.set_trace()
在查找html元素的时候,我觉得比较好用的有两种方法吧。
- 使用xpath,这个在chrome中可以直接复制出来,问题就是需要网页的格式固定
- 使用class_name,比较多的元素拥有这个属性,但是容易重。注意class_name对应的是那个字段整个字符串的第一个单词(空格之前的)
如果有id,还是直接用id吧。
def save_result(real_name_list: list,eid_list: list,file_name: str = 'companies.csv'):data_frame['工商注册企业名称'] = real_name_listdata_frame['eid'] = eid_listdata_frame.to_csv(file_name, index=0, encoding="utf_8_sig")for idx, name in enumerate(name_list[start_idx:]):search_box = browser.find_elements_by_class_name('form-control')[2]search_box.send_keys(Keys.CONTROL, "a")# search_box.clear()search_box.send_keys(name)search_box.send_keys(Keys.ENTER)pdb.set_trace()company_name = browser.find_element_by_class_name('company-title')href = company_name.find_element_by_xpath('./a').get_attribute('href')print(company_name.text)result_list[start_idx + idx] = company_name.texteid_list[start_idx + idx] = href.split('/')[-1]save_result(result_list, eid_list)
