用python写爬虫-7.selenium

写在最前面,selenium我觉得不是很适合爬取,因为慢,它只要是控制浏览器来爬取,我觉得有点像excel中的宏,定制了一定操作,批量操作,适合于死活没找到数据地址的情况。
比如,我最近在爬取网易财经的个股历史数据网易个股历史数据,想把个股的上市以来的数据下载下来,我的操作就是下载数据-上市日-今日-下载。它就启动下载了。
但是本来直接访问下载页面然后下载就好,但是这次就属于死活没找到的情况,selenium就派上用场了。
selenium有个好伙伴叫做Katalon Automation Recorder,是一个chrome插件,用法就是按record进行录制,正常操作就好,依次按下下载数据-上市日-今日-下载,然后stop。

Katalon

导出export
image.png

这就是核心了。
复制粘贴到python里就变成了这样。

from selenium import webdriver
import time
import pandas as pd
import multiprocessing as mp
def getone(code):
    option = webdriver.ChromeOptions()
    option.add_argument('disable-infobars')
    driver = webdriver.Chrome(chrome_options=option)
    url = 'http://quotes.money.163.com/trade/lsjysj_{}.html'
    driver.get(url.format(code))
    driver.find_element_by_id("downloadData").click()
    driver.find_element_by_xpath("(//input[@name='date_start_type'])[2]").click()
    driver.find_element_by_link_text(u"下载").click()
    time.sleep(1.8)
    driver.close()

time.sleep(1.8)是下载后停顿1.8s,主要是给下载留时间。
批量下载的话,加上pandas很好用。

def getall(file):
    df = pd.read_csv(file,dtype={'code':str})
    df['code'].map(getone)

再加上多进程加一下速

def multi():
    pool = mp.Pool()
    pool.map(getall,('laogu.txt',))

if __name__ == '__main__':
    multi()

selenium就是这么简单。

你可能感兴趣的:(用python写爬虫-7.selenium)