这个时当时给某位朋友爬一些企业的名字,和一个我不知道的字段。在通过企信网查询。
from numpy import nan
from pandas.core.frame import DataFrame
from selenium import webdriver
import pandas as pd
from selenium.webdriver.common.keys import Keys # 键盘按键
import numpy as np
import 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_list
data_frame['eid'] = eid_list
data_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.text
eid_list[start_idx + idx] = href.split('/')[-1]
save_result(result_list, eid_list)