毕业论文找文献是个问题,我直接用python把全网文献爬了一遍... |
您所在的位置:网站首页 › 爬虫爬取文献 › 毕业论文找文献是个问题,我直接用python把全网文献爬了一遍... |
一、写在前面 马上要毕业了兄弟们,毕业论文是个麻烦事,论文要的资料得一条一条去网上查看,那多浪费时间,咱直接写个爬虫,批量下载慢慢看,不舒服? 二、准备工作使用软件 Python和pycharm就可以了,版本的话都行,只要你别用python2。 模块 requests #模拟请求 Selenium # 浏览器自动化操作win+r打开搜索框,输入cmd按确定打开命令提示符窗口,输入pip install 加上你要安装的模块名, 回车即可安装,下载速度慢就换国内镜像源。 然后要下载一个谷歌浏览器驱动,版本跟你的浏览器最相近的那个就行。 三、开始爬取页面分析 首先分析一下知网页面元素,我们一般是在首页输入框中输入你想搜的内容,然后跳转到搜索页面。 我们通过浏览器的检查页面,得到输入框和搜索图标的XPATH分别为: input_xpath = '/html[1]/body[1]/div[1]/div[2]/div[1]/div[1]/input[1]' button_xpath = '/html[1]/body[1]/div[1]/div[2]/div[1]/div[1]/input[2]'在输入框输入要搜索的内容,操作搜索按钮转到结果页。 以搜索Python为例,共找到15,925条,300页,每页中包含20个条目,每个条目包含题目、作者、来源等等内容。 通过对当前页面分析发现每个条目对应的的xpath的规律 /html[1]/body[1]/div[5]/div[2]/div[2]/div[2]/form[1]/div[1]/table[1]/tbody[1]/tr[1]/td[2]就是倒数第二个标签数字代表本页的第几个条目,最后一个标签 2 - 6 分别代表题目、作者、来源、发表时间和数据库。在当前页面无法或者文献的摘要信息,下载链接,需要进一步点击进入相关文献条目。 进入详情页面后,根据class name:abstract-text 能够很容易定位到摘要的文本,class name: btn-dlcaj 定位到下载链接,其他元素也是一样的。
完成面分析后就可以开始写代码了! 导入要用的库 import time 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 from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from urllib.parse import urljoin创建浏览器对象,设置相关参数 get直接返回,不再等待界面加载完成 desired_capabilities = DesiredCapabilities.CHROME desired_capabilities["pageLoadStrategy"] = "none"设置谷歌驱动器的环境 options = webdriver.ChromeOptions()设置chrome不加载图片,提高速度。 options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2})设置不显示窗口 options.add_argument('--headless')创建一个谷歌驱动器 driver = webdriver.Chrome(options=options)设置搜索主题 theme = "Python"设置所需篇数 papers_need = 100打开页面搜索关键词 打开页面 driver.get("https://www.****.net")网址我屏蔽了,各位自己换一下换成最大的那个查文献论文的网站。 传入关键字 WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,'''//*[@id="txt_SearchText"]''') ) ).send_keys(theme)点击搜索 WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,"/html/body/div[1]/div[2]/div/div[1]/input[2]") ) ).click() time.sleep(3)点击切换中文文献 WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,"/html/body/div[5]/div[1]/div/div/div/a[1]") ) ).click() time.sleep(1)获取总文献数和页数 res_unm = WebDriverWait( driver, 100 ).until( EC.presence_of_element_located( (By.XPATH ,"/html/body/div[5]/div[2]/div[2]/div[2]/form/div/div[1]/div[1]/span[1]/em") ) ).text去除千分位里的逗号 res_unm = int(res_unm.replace(",",'')) page_unm = int(res_unm/20) + 1 print(f"共找到 {res_unm} 条结果, {page_unm} 页。")解析结果页 赋值序号,控制爬取的文章数量。 count = 1当爬取数量小于需求时,循环网页页码。 while count 1: driver.close() driver.switch_to_window(n2[0])计数,判断需求是否足够。 count += 1 if count == papers_need:break切换到下一页 WebDriverWait( driver, 10 ).until( EC.presence_of_element_located( (By.XPATH ,"//a[@id='PageNext']") ) ).click()关闭浏览器 driver.close()到这里所有的功能都实现了,我还给大家准备了这些资料。 python学习路线汇总 精品Python学习书籍100本 Python入门视频合集 Python实战案例 Python面试题 Python相关软件工具/pycharm永久激活四、效果展示兄弟们,记得随手三连,你的助力是我更新的动力~ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |