最开始学selenium爬虫看的代码(注释详细)



from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import csv
import time
browser = webdriver.Chrome()  # executable_path是驱动器chromedriver的路径
browser.minimize_window()  # 最小化窗口,方便输入要检索的页数和关键词
url = 'http://epub.cnki.net/grid2008/index/ZKCALD.htm'


def start_spider():
    # 请求url
    browser.get(url)
    # 显示等待输入框是否加载完成
    browser.find_element_by_id('cm_1_6').click()
    time.sleep(2)
    browser.find_element_by_id('auscho2_1_value1').send_keys('图书情报')
    # 找到输入框的id,并输入关键字,如这儿我们输入测绘,待会儿我们爬取的就是关于测绘文献方面的信息
    # word = input("请输入要检索的关键词 :")
    print("\n请稍等片刻!")
    browser.find_element_by_id('auscho_1_value1').send_keys('赵媛')
    # 输入关键字之后点击搜索
    browser.find_element_by_id('Button5').click()
    time.sleep(5)
    # 定位到iframe
    try:
        browser.find_element_by_id('iframeResult')
    except NoSuchElementException:
        print('no')
    browser.switch_to.parent_frame()
    x=browser.switch_to.frame('iframeResult')
    print(x)
    # browser.switch_to.frame('iframeResult')
    a = browser.find_element_by_class_name('s_table')
    tr_content = a.find_elements_by_tag_name("tr")  # 进一步定位到表格内容所在的td节点
    lst = []  # 存储为list
    print(lst)  # 输出表格内容
    for tr in tr_content:
        td =tr.find_elements_by_tag_name("td")  # 进一步定位到表格内容所在的td节点
        lst.append(td.text)
    # a=browser.find_element_by_class_name('s_tabletd_rb')
    print(lst)  # 输出表格内容
    browser.switch_to.default_content()
    # # print(browser.page_source)
    # # 显示等待文献是否加载完成
    # WebDriverWait(browser, 1000).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'g-search-body')))
    # # 声明一个标记,用来标记翻页几页
    # count = 1
    # while True:
    #     # 显示等待加载更多按钮加载完成
    #     WebDriverWait(browser, 1000).until(
    #         EC.presence_of_all_elements_located((By.CLASS_NAME, 'c-company__body-item-more')))
    #     # 获取加载更多按钮
    #     Btn = browser.find_element_by_class_name('c-company__body-item-more')
    #     # 显示等待该信息加载完成
    #     WebDriverWait(browser, 1000).until(EC.presence_of_all_elements_located(
    #         (By.XPATH, '//div[@id="searchlist_div"]/div[{}]/div[@class="c-company__body-item"]'.format(2 * count - 1))))
    #     # 获取在div标签的信息,其中format(2*count-1)是因为加载的时候有显示多少条
    #     # 简单的说就是这些div的信息都是奇数
    #     divs = browser.find_elements_by_xpath(
    #         '//div[@id="searchlist_div"]/div[{}]/div[@class="c-company__body-item"]'.format(2 * count - 1))
    #     # 遍历循环
    #     for div in divs:
    #         # 获取文献的题目
    #         name = div.find_element_by_class_name('c-company__body-title').text
    #         # 获取文献的作者
    #         author = div.find_element_by_class_name('c-company__body-author').text
    #         # 获取文献的来源和日期、文献类型等
    #         text = div.find_element_by_class_name('c-company__body-name').text.split()
    #         if (len(text) == 3 and text[-1] == '优先') or len(text) == 2:
    #             # 来源
    #             source = text[0]
    #             # 日期
    #             datetime = text[1]
    #             # 文献类型
    #             literature_type = None
    #         else:
    #             source = text[0]
    #             datetime = text[2]
    #             literature_type = text[1]
    #
    #         data = (name, author, source, datetime, literature_type)
    #         with open('D:\Python_DATA\data.csv', 'a', encoding='utf-8', newline='') as csvfile:
    #             writer = csv.writer(csvfile)
    #             writer.writerow(data)
    #
    #     # 如果Btn按钮(就是加载更多这个按钮)没有找到(就是已经到底了),就退出
    #     if not Btn:
    #         break
    #     else:
    #         Btn.click()
    #     # 如果到了爬取的页数就退出
    #     if count == page:
    #         break
    #     count += 1
    #     # 延迟,让爬虫爬取慢点,给服务器减轻压力,以免服务器崩溃
    #     time.sleep(3)
    #

if __name__ == '__main__':
    # 先写入表头信息
    # with open('D:\Python_DATA\data.csv', 'a', encoding='utf-8',
    #           newline='') as csvfile:  # 存储的路径可以自己设置,我存在了D:\Python_DATA\data.csv里
    #     writer = csv.writer(csvfile)
    #     writer.writerow(("文献名", "作者", "来源", "发表日期", "文献类型"))
    start_spider()  # eval()是执行一个字符串表达式
    # browser.close()
    print("爬取完成,请到相应文件夹查看!")

上一篇:python+selenium实现网站图片批量下载保存


下一篇:Javascript工具 - javascript混淆器Obfuscator