这个时当时给某位朋友爬一些企业的名字,和一个我不知道的字段。在通过企信网查询。

    1. from numpy import nan
    2. from pandas.core.frame import DataFrame
    3. from selenium import webdriver
    4. import pandas as pd
    5. from selenium.webdriver.common.keys import Keys # 键盘按键
    6. import numpy as np
    7. import pdb

    首先是实例化一个操作浏览器的driver,需要给到相应的驱动文件,就是之前下载的那个。

    1. browser = webdriver.Chrome(executable_path='chromedriver.exe')
    2. browser.get('https://www.qixin.com/search?key=中国工商银行&page=1')
    3. data_frame = pd.read_csv('companies.csv')
    4. name_list = data_frame['品牌名称'].to_list()
    5. result_list = data_frame['工商注册企业名称'].to_list()
    6. eid_list = data_frame['eid'].to_list()
    7. result = data_frame['工商注册企业名称'].isna().to_numpy()
    8. start_idx = (~result).sum()
    9. print('start from {}'.format(start_idx))
    10. pdb.set_trace()

    在查找html元素的时候,我觉得比较好用的有两种方法吧。

    • 使用xpath,这个在chrome中可以直接复制出来,问题就是需要网页的格式固定
    • 使用class_name,比较多的元素拥有这个属性,但是容易重。注意class_name对应的是那个字段整个字符串的第一个单词(空格之前的)

    如果有id,还是直接用id吧。

    1. def save_result(real_name_list: list,
    2. eid_list: list,
    3. file_name: str = 'companies.csv'):
    4. data_frame['工商注册企业名称'] = real_name_list
    5. data_frame['eid'] = eid_list
    6. data_frame.to_csv(file_name, index=0, encoding="utf_8_sig")
    7. for idx, name in enumerate(name_list[start_idx:]):
    8. search_box = browser.find_elements_by_class_name('form-control')[2]
    9. search_box.send_keys(Keys.CONTROL, "a")
    10. # search_box.clear()
    11. search_box.send_keys(name)
    12. search_box.send_keys(Keys.ENTER)
    13. pdb.set_trace()
    14. company_name = browser.find_element_by_class_name('company-title')
    15. href = company_name.find_element_by_xpath('./a').get_attribute('href')
    16. print(company_name.text)
    17. result_list[start_idx + idx] = company_name.text
    18. eid_list[start_idx + idx] = href.split('/')[-1]
    19. save_result(result_list, eid_list)