继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python爬取知网信息——Python+selenium爬取知网信息(文献名,作者,来源,发表日期,文献类型)

慕莱坞8273432
关注TA
已关注
手记 4
粉丝 1
获赞 1


# -*- coding: utf-8 -*-

#时间:2019.5.1

#运行环境Python 3.*

'''

1、运行此代码前需要先下载Chrome浏览器,去百度搜索下载

2、我是利用selenium自动化测试工具进行爬取的,所以要再安装Selenium库,pip install selenium

3、ChromeDriver环境配置,先知道安装的Chrome浏览器的版本号,然后去https://chromedriver.storage.googleapis.com/index.html下载对应版本的驱动器,我用的是73的

所以下载驱动也是73版本的,接着要么是将这个可视化驱动Chromedriver.exe配置到环境变量中(这种方法我就不多说了,可以上网搜。我这提供我用的驱动:

                          链接:https://pan.baidu.com/s/1W5XWG3Rj8kNYHo9R9dmW_g 

                          提取码:tqxd 

复制这段内容后打开百度网盘手机App,操作更方便哦),我这儿是直接将路径作为参数传入,如下。

###运行的时候后会有Chrome浏览器弹出来,这时候在代码下方输入要爬取的页数,然后回车等结果就OK啦

'''

 

from selenium import webdriver

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

from selenium.webdriver.common.by import By

import time

import csv

 

# 设置谷歌驱动器的环境

options = webdriver.ChromeOptions()

# 设置chrome不加载图片,提高速度

options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})

# 创建一个谷歌驱动器

browser = webdriver.Chrome(options=options,executable_path='D:\Python35\Scripts\chromedriver')#executable_path是驱动器chromedriver的路径

browser.minimize_window()#最小化窗口,方便输入要检索的页数和关键词

url = 'http://wap.cnki.net/touch/web/guide'

 

def start_spider(page):

    # 请求url

    browser.get(url)

    # 显示等待输入框是否加载完成

    WebDriverWait(browser, 1000).until(EC.presence_of_all_elements_located((By.ID, 'keyword')))

    # 找到输入框的id,并输入关键字,如这儿我们输入测绘,待会儿我们爬取的就是关于测绘文献方面的信息

    word=input("请输入要检索的关键词 :")

    print("\n请稍等片刻!")

    browser.find_element_by_id('keyword').send_keys(word)

    # 输入关键字之后点击搜索

    browser.find_element_by_id('btnSearch ').click()

    # 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(page=eval(input('请输入要爬取的页数(如果需要全部爬取请输入0,可能需要等很长时间):')))  # eval()是执行一个字符串表达式

    browser.close()

    print("爬取完成,请到相应文件夹查看!")

https://img4.mukewang.com/5d30782d0001b03708040289.jpg

https://img.mukewang.com/5d30783200016d9109030751.jpg

--------------------- 

作者:诚长ing 

来源:https://www.eukona.net/



版权声明:本文为博主原创文章,转载请附上博文链接!


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP