前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:崩坏的芝麻


由于实验室需要一些语料做研究,语料要求是知网上的论文摘要,但是目前最新版的知网爬起来有些麻烦,所以我利用的是知网的另外一个搜索接口

比如下面这个网页:
http://search.cnki.net/Search.aspx?q=肉制品

搜索出来的结果和知网上的结果几乎一样,另外以后面试找Python工作,项目经验展示是核心,如果你缺项目练习,去小编的Python交流.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,里面很多新教程项目

在这个基础上,我简单看了些网页的结构,很容易就能写出爬取得代码(是最基础的,相当不完善,增加其他功能可自行增加)

网页的结构还是很清晰的


摘要信息也很清晰

我使用的是 pymysql 连接的数据库,效率也还可以
下面直接贴代码:

# -*- coding: utf-8 -*-
import time
import re
import random
import requests
from bs4 import BeautifulSoup
import pymysql connection = pymysql.connect(host='',
user='',
password='',
db='',
port=3306,
charset='utf8') # 注意是utf8不是utf-8 # 获取游标
cursor = connection.cursor() #url = 'http://epub.cnki.net/grid2008/brief/detailj.aspx?filename=RLGY201806014&dbname=CJFDLAST2018' #这个headers信息必须包含,否则该网站会将你的请求重定向到其它页面
headers = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'Accept-Encoding':'gzip, deflate, sdch',
'Accept-Language':'zh-CN,zh;q=0.8',
'Connection':'keep-alive',
'Host':'www.cnki.net',
'Referer':'http://search.cnki.net/search.aspx?q=%E4%BD%9C%E8%80%85%E5%8D%95%E4%BD%8D%3a%E6%AD%A6%E6%B1%89%E5%A4%A7%E5%AD%A6&rank=relevant&cluster=zyk&val=CDFDTOTAL',
'Upgrade-Insecure-Requests':'1',
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
} headers1 = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'
} def get_url_list(start_url):
depth = 20
url_list = []
for i in range(depth):
try:
url = start_url + "&p=" + str(i * 15)
search = requests.get(url.replace('\n', ''), headers=headers1)
soup = BeautifulSoup(search.text, 'html.parser')
for art in soup.find_all('div', class_='wz_tab'):
print(art.find('a')['href'])
if art.find('a')['href'] not in url_list:
url_list.append(art.find('a')['href'])
print("爬取第" + str(i) + "页成功!")
time.sleep(random.randint(1, 3))
except:
print("爬取第" + str(i) + "页失败!")
return url_list def get_data(url_list, wordType):
try:
# 通过url_results.txt读取链接进行访问
for url in url_list:
i = 1;
if url == pymysql.NULL or url == '':
continue
try:
html = requests.get(url.replace('\n', ''), headers=headers)
soup = BeautifulSoup(html.text, 'html.parser')
except:
print("获取网页失败")
try:
print(url)
if soup is None:
continue
# 获取标题
title = soup.find('title').get_text().split('-')[0]
# 获取作者
author = ''
for a in soup.find('div', class_='summary pad10').find('p').find_all('a', class_='KnowledgeNetLink'):
author += (a.get_text() + ' ')
# 获取摘要
abstract = soup.find('span', id='ChDivSummary').get_text()
# 获取关键词,存在没有关键词的情况
except:
print("部分获取失败")
pass
try:
key = ''
for k in soup.find('span', id='ChDivKeyWord').find_all('a', class_='KnowledgeNetLink'):
key += (k.get_text() + ' ')
except:
pass
print("第" + str(i) + "个url")
print("【Title】:" + title)
print("【author】:" + author)
print("【abstract】:" + abstract)
print("【key】:" + key)
# 执行SQL语句
cursor.execute('INSERT INTO cnki VALUES (NULL, %s, %s, %s, %s, %s)', (wordType, title, author, abstract, key))
# 提交到数据库执行
connection.commit() print()
print("爬取完毕")
finally:
print() if __name__ == '__main__':
try:
for wordType in {"大肠杆菌", "菌群总落", "胭脂红", "日落黄"}:
wordType = "肉+" + wordType
start_url = "http://search.cnki.net/search.aspx?q=%s&rank=relevant&cluster=zyk&val=" % wordType
url_list = get_url_list(start_url)
print("开始爬取")
get_data(url_list, wordType)
print("一种类型爬取完毕")
print("全部爬取完毕")
finally:
connection.close()

在这里的关键词我简单的选了几个,作为实验,如果爬取的很多,可以写在txt文件里,直接读取就可以,非常方便。

Python爬虫根据关键词爬取知网论文摘要并保存到数据库中【入门必学】的更多相关文章

  1. 芝麻HTTP:Python爬虫实战之抓取爱问知识人问题并保存至数据库

    本次为大家带来的是抓取爱问知识人的问题并将问题和答案保存到数据库的方法,涉及的内容包括: Urllib的用法及异常处理 Beautiful Soup的简单应用 MySQLdb的基础用法 正则表达式的简 ...

  2. 【转载】教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神

    原文:教你分分钟学会用python爬虫框架Scrapy爬取心目中的女神 本博文将带领你从入门到精通爬虫框架Scrapy,最终具备爬取任何网页的数据的能力.本文以校花网为例进行爬取,校花网:http:/ ...

  3. Python爬虫实例:爬取B站《工作细胞》短评——异步加载信息的爬取

    很多网页的信息都是通过异步加载的,本文就举例讨论下此类网页的抓取. <工作细胞>最近比较火,bilibili 上目前的短评已经有17000多条. 先看分析下页面 右边 li 标签中的就是短 ...

  4. Python爬虫实例:爬取猫眼电影——破解字体反爬

    字体反爬 字体反爬也就是自定义字体反爬,通过调用自定义的字体文件来渲染网页中的文字,而网页中的文字不再是文字,而是相应的字体编码,通过复制或者简单的采集是无法采集到编码后的文字内容的. 现在貌似不少网 ...

  5. Python爬虫实例:爬取豆瓣Top250

    入门第一个爬虫一般都是爬这个,实在是太简单.用了 requests 和 bs4 库. 1.检查网页元素,提取所需要的信息并保存.这个用 bs4 就可以,前面的文章中已经有详细的用法阐述. 2.找到下一 ...

  6. Python爬虫教程-17-ajax爬取实例(豆瓣电影)

    Python爬虫教程-17-ajax爬取实例(豆瓣电影) ajax: 简单的说,就是一段js代码,通过这段代码,可以让页面发送异步的请求,或者向服务器发送一个东西,即和服务器进行交互 对于ajax: ...

  7. Python爬虫实战之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 对百度贴吧的任意帖子进行抓取 指定是否只抓取楼主发帖 ...

  8. Python爬取招聘信息,并且存储到MySQL数据库中

    前面一篇文章主要讲述,如何通过Python爬取招聘信息,且爬取的日期为前一天的,同时将爬取的内容保存到数据库中:这篇文章主要讲述如何将python文件压缩成exe可执行文件,供后面的操作. 这系列文章 ...

  9. 基于webmagic的爬虫小应用--爬取知乎用户信息

    听到“爬虫”,是不是第一时间想到Python/php ? 多少想玩爬虫的Java学习者就因为语言不通而止步.Java是真的不能做爬虫吗? 当然不是. 只不过python的3行代码能解决的问题,而Jav ...

随机推荐

  1. idea 常用功能

      Ctrl + E:打开最近文件   双击 Shift:按文件名查找文件   Ctrl + Shift + F:全局搜索   Alt + ~(数字 1 左边的键):commit.push 代码   ...

  2. Kickstart Round H 2019 Problem B. Diagonal Puzzle

    有史以来打得最差的一次kickstart竟然发生在winter camp出结果前的最后一次ks = = 感觉自己的winter camp要凉了 究其原因,无非自己太眼高手低,好好做B, C的小数据,也 ...

  3. ReentrantLock 如何实现非公平锁?和公平锁实现有什么区别

    reentrant 英[riːˈɛntrənt] 美[ˌriˈɛntrənt] 先学会读.单词原意是可重入的 考察显示锁的使用.可延伸知识点 独占锁 & 共享锁 独占锁 - 悲观锁(不能同时被 ...

  4. Laravel上传文件(单文件,多文件)

    为了方便,先修改一个配置文件,再laravel框架中config配置中找到  filesystems.php 文件 修改代码如下 'local' => [ 'driver' => 'loc ...

  5. ubuntu18+uwsgi+nginx部署django项目

    更新系统软件源 sudo apt-get update pip3安装 sudo apt install python3-pip 安装virtualenvwrapper pip3 install vir ...

  6. java的Io流机制的学习

    IO流机制 File类的使用 File类的构造方法 File(URI uri) File(String pathname) File(File parent, String child) File(S ...

  7. [ML机器学习 - Stanford University] - Week1 - 01 Introduction

    What is Machine Learning? Two definitions of Machine Learning are offered. Arthur Samuel described i ...

  8. 扛把子组20191114-4 Beta发布用户使用报告

    此作业的要求参见:http://edu.cnblogs.com/campus/nenu/2019fall/homework/10007 小组情况: 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩 ...

  9. Python3 之 类属性与实例属性

    1.类属性与实例属性 类属性就相当与全局变量,实例对象共有的属性,实例对象的属性为实例对象自己私有. 类属性就是类对象(Tool)所拥有的属性,它被所有类对象的实例对象(实例方法)所共有,在内存中只存 ...

  10. /etc/security/limits.conf 详解与配置

    目录 一. /etc/security/limits.conf 详解 /etc/security/limits.conf 配置解析 /etc/security/limits.d/ 目录 二. ulim ...