一、实验目的

(1) 熟悉网页浏览器开发工具的使用;

(2) 掌握动态网页加载过程;

(3) 掌握 post 请求参数设置;

(4) 掌握基本的反反爬技术;

(5) 能够根据问题需求,指定网络爬虫方案,并编码实现。

(6) 具备撰写项目实验报告的能力。

二、实验内容

网页来自:

https://kns.cnki.net/kns8/AdvSearch?id=11&dbcode=CFLQ&searchtype=gradeS earch&ishistory=1

内容:

关于《混合动力汽车》主题的173篇学术期刊

任务:

(1)爬取多页的文章列表数据,包括:

文章标题,文章链接,作者,刊名,发表时间,被引,下载

(2)根据文件链接,进入文章详情页

爬取:摘要、关键词,专辑等。

(3)数据分析

以下任务任选一个完成:

1) 按月统计每月文章发表量,制作图表;

2) 基于文章的摘要(或题目)制作词云图,查看主要关键词

三、实验设计及实现

目录

(1)项目描述

(2)项目分析

爬取方案制定和实现

1)构建网络请求函数

2、3)数据提取和解析并构建数据处理函数

4)构建主函调用数据处理函数进行数据储存

5)爬虫实现(源代码)

(6)运行结果

任务二

1)构建网络请求函数

2、3)数据提取和解析并构建数据处理函数

4)获取任务一保存的文章链接URL

5)构建主函调用数据处理函数对URL进行数据储存

6)爬虫实现(源代码)

(7)运行结果

任务三

1)获取词云背景和文本信息

2)对文本信息进行处理

3、4)生成词云


(1)项目描述

来自中国知网的关于关于《混合动力汽车》主题的173篇学术期刊,可用于研究相关领域的学术问题,了解该类学士期刊的关键字和内容。

(2)项目分析

该网页的请求方法为POST,获取时还要给定不同的表单数据,网页目录中包含了整个网页的预览效果,该网页数据储存XHR中的GetGridTableHtml,本实验主要对其中的数据进行爬取和分析。

  1. 爬取方案制定和实现

1)构建网络请求函数

2、3)数据提取和解析并构建数据处理函数

4)构建主函调用数据处理函数进行数据储存

5)爬虫实现(源代码)

  1. import requests
  2. import json
  3. import re
  4. import pprint
  5. import jieba
  6. from wordcloud import WordCloud
  7. import numpy as np
  8. from PIL import Image
  9. from bs4 import BeautifulSoup
  10. import matplotlib.pyplot as plt
  11. def geturl(data):
  12. url = 'https://kns.cnki.net/kns8/Brief/GetGridTableHtml'
  13. headers = {
  14. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52',
  15. 'X-Requested-With': 'XMLHttpRequest',
  16. 'Referer': 'https://kns.cnki.net/kns8/AdvSearch?dbcode=CFLQ'
  17. }
  18. resp = requests.post(url,data=data,headers=headers)
  19. return resp
  20. def info(resp):
  21. html = resp.text
  22. soup = BeautifulSoup(html,'lxml')#创建beautifulsoup对象
  23. odds =soup.select('tr.odd')
  24. for odd in odds:
  25. title = odd.select('td.name a')
  26. title = title[0].get_text()
  27. names = odd.select('td.author a')
  28. allname = list({})
  29. for name in names:
  30. n = name.get_text()
  31. allname.append(n)
  32. source = odd.select('td.source a')
  33. source = source[0].get_text()
  34. date = odd.select('td.date')
  35. date = date[0].get_text().split()
  36. download = odd.select('td.download a')
  37. download = download[0].get_text()
  38. href = odd.select('td.name a')
  39. filename = re.search('filename=(.*?)&',str(href[0])).group(1)
  40. url = 'https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDLAST2022&filename={}'.format(filename)
  41. info = {
  42. '文章标题':title,
  43. '文章链接':url,
  44. '作者':allname,
  45. '刊名':source,
  46. '发表时间':date,
  47. '下载次数':download
  48. }
  49. with open("./article.json","a",encoding='utf-8')as t:
  50. json.dump(info,t)
  51. pprint.pprint(info)
  52. def getinfo(page):
  53. data = {
  54. 'IsSearch': 'false',
  55. 'QueryJson': '{"Platform":"","DBCode":"CFLQ","KuaKuCode":"","QNode":{"QGroup":[{"Key":"Subject","Title":"","Logic":4,"Items":[],"ChildItems":[{"Key":"input[data-tipid=gradetxt-1]","Title":"主题","Logic":0,"Items":[{"Key":"","Title":"混合动力汽车","Logic":1,"Name":"SU","Operate":"%=","Value":"混合动力汽车","ExtendType":1,"ExtendValue":"中英文对照","Value2":""}],"ChildItems":[]}]},{"Key":"ControlGroup","Title":"","Logic":1,"Items":[],"ChildItems":[{"Key":".tit-startend-yearbox","Title":"","Logic":1,"Items":[{"Key":".tit-startend-yearbox","Title":"出版年度","Logic":1,"Name":"YE","Operate":"","Value":"2020","ExtendType":2,"ExtendValue":"","Value2":"2022","BlurType":""}],"ChildItems":[]},{"Key":".extend-tit-checklist","Title":"","Logic":1,"Items":[{"Key":0,"Title":"SCI","Logic":2,"Name":"SI","Operate":"=","Value":"Y","ExtendType":14,"ExtendValue":"","Value2":"","BlurType":""},{"Key":0,"Title":"EI","Logic":2,"Name":"EI","Operate":"=","Value":"Y","ExtendType":14,"ExtendValue":"","Value2":"","BlurType":""},{"Key":0,"Title":"北大核心","Logic":2,"Name":"HX","Operate":"=","Value":"Y","ExtendType":14,"ExtendValue":"","Value2":"","BlurType":""},{"Key":0,"Title":"CSSCI","Logic":2,"Name":"CSI","Operate":"=","Value":"Y","ExtendType":14,"ExtendValue":"","Value2":"","BlurType":""},{"Key":0,"Title":"CSCD","Logic":2,"Name":"CSD","Operate":"=","Value":"Y","ExtendType":14,"ExtendValue":"","Value2":"","BlurType":""}],"ChildItems":[]}]}]}}',
  56. 'SearchSql': '2827E4B6502D8710F4C63FA68A0E7A152D8972E3EF5541A46DDE8B3A62A549C1B093F0A10875FEBDE5B17F4F918A6F10CAA2EA622595552DEE59C9627930D8AA16C4AEE03761E9763755CFB4AB484B0A8B7EF2B8C90286C2DEC78CD0E3AE2DB9B3BE203F0BDCAD4BCDFF877136D437E9DCE523BB91848194E9042A1EF42639481893C32BC15EB49F8DBA6D88E0BE298A81A2A10E0803C3F010CB7FA11AA1A188E6726B6A7F4FD1C636081BE13C709F99462180D1BA1B79C9098ADE36A48F3CCE2B1B78B0A17F7A5C77FADBBE119FDF3E7C8AFB383F33B5F6EB3B6B6C6D79B830FD7B151288283EE5D974D96297962072C0D40233CCAFEE9C6498694742FE2D80FCAAA0FABC4D63452A8EC9796C58C80333763B655C7C0320539DF1A90468E26D37D70D269AAAAFF3E3B04C1DC5D26B485836840CD0CB5372BB7336EEC13900D63CE4340AFB729888F8A144ABD212A6B34FAAFA6D1E5439D516FFED876EB0F8D68C613D561024DD68F2009006DB8FA215E521048042041D8E8A3E69F019137BBC029BC474CA02BDA146F1C234D135725FF5EA178CDA3AB8304742D417E95D79A47D1C1378F6B9586ED9ED0B1A886633E6C5630DEB57C5B253290AD78041CE70B4847BFA299012FF1020413DF186908A51BD59D66C9AF8AC95C68D9EFAAF3F7C0268D662FA2BB9F17B0D6E8A9488F27C79CDF23D4DC15A1F5A2E7AC8B86FDE619C10C36805FBCF1917510D091DBF76C7B90D92A761A28EE3050C5AB5D2B5675CF86D03EB70EB6CC3E8FFB685A4390394C71475B56BF1E3AD45BBC2AC45221795D0A9FF733A6A5E31D73407BD10E50267DE6655D6B04D1980ED447E96806489766D94950E346F296415EA9CD72F1D9A4DDC1690D3A5B43DCD14B732E89F3F04E48378BEF7C8B7397C57B7873B4232AC29E77A5E6790397DEBE1C498C1980F9F13F26E4FC31951A5A6ED9FE2EE80608F09A778F806CC129FE113B4CFCB500FF324C2B13617573945F8D9AA92C544E03CC2B9234726757135F53D7EBB12F4E4BC5C6D7702793B23E37598B7070F2267CB166547FE45E445A881134FE00D9D3E3D5C041F973D6FE3D83635BB70B21E0F6D804F47A772FCEE5A8C9298497BFC8EDF97B1707A975F8E148740DF3F7648E92E132D5BA61EF1AB103305C3E3E008DF2E9398D0D47047570CEE576EA09B0AEAE55B15F6456221327031D6880BDBA6432A488A801D65350DB5C40D0E087753851488F646EA3AC2C82300495D93BB13AE3D72235FC788FC2C681200C065F0FB310F9BF781764774C6CF8B929A6BA9B38DBAC5583E655604E0B5B707AD8A3AD21EBFDC8D1D806AD456359A60D2FFF23692314BF03BF3E4174DC177C33A8CD5B41716D6A452C5567BC395F59D24A6AFBBC29CC876250E5BE7C3F03E6E8A0A87B782F575CCD2AF49B568D2F63BAA26BD0DB1058FD6B8C72E09C5ABBBCB053FA128BDFB318EFCC4745B32CCA69872E0D62C8DC7D392BB8590B2488A0A82EC1AE36973FE211804E3EF24770CE8D5A62869D2C280B6A9580DC15E3955895E3711C8EED8C3EC5AC5DBFEE92B1D579D3924CD88D8059F9BAA9AC2F0D3613C78D402CC182C2ABDAFEA0AD8DAE883B3DF8D11ECE705EF37CE6516DC7AFBEC7F164549A41C69CF6EEE8983739DFEB8E22E5D9DEAE15B3C2946EED0970C7A499705036EF348993E1B0D',
  57. 'PageName': 'AdvSearch',
  58. 'HandlerId': '0',
  59. 'DBCode': 'CFLQ',
  60. 'KuaKuCodes': '',
  61. 'CurPage': page,
  62. 'RecordsCntPerPage': '20',
  63. 'CurDisplayMode': 'listmode',
  64. 'CurrSortField': 'PT',
  65. 'CurrSortFieldType': 'desc',
  66. 'IsSortSearch': 'false',
  67. 'IsSentenceSearch': 'false',
  68. 'Subject': ''}
  69. resp = geturl(data)
  70. info(resp)
  71. for i in range(1,10):
  72. getinfo(i)

(6)运行结果

json文件也成功写入

任务二

1)构建网络请求函数

2、3)数据提取和解析并构建数据处理函数

4)获取任务一保存的文章链接URL

5)构建主函调用数据处理函数对URL进行数据储存

6)爬虫实现(源代码)

  1. # 从保存的数据中获取文章链接
  2. def getarticle(url):
  3. headers = {
  4. 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36 Edg/106.0.1370.52'
  5. }
  6. resp = requests.get(url,headers=headers)
  7. return resp
  8. def getarticleinfo(resp):
  9. html = resp.text
  10. soup = BeautifulSoup(html,'lxml')#创建beautifulsoup对象
  11. abstracttext = soup.select('.abstract-text')
  12. abstracttext=abstracttext[0].get_text()
  13. with open('./text.txt','a')as f:
  14. f.write(abstracttext)
  15. Album = soup.select('.top-space')
  16. Album = Album[0].get_text().split()
  17. keywords = soup.select('.keywords')
  18. if keywords!=[]:
  19. keywords = keywords[0].get_text().split()
  20. else:
  21. keywords='NULL'
  22. info = {
  23. "摘要":abstracttext,
  24. "关键词":keywords,
  25. "专辑":Album
  26. }
  27. print(info)
  28. file = open('./article.json','r',encoding='utf-8')
  29. data = file.readline()
  30. urls = re.findall('u63a5": (.*?),',data)
  31. for i in urls:
  32. i=i.strip('"')
  33. url = i
  34. resp = getarticle(url)
  35. getarticleinfo(resp)

(7)运行结果

任务三

1)获取词云背景和文本信息

2)对文本信息进行处理

3、4)生成词云

四、总结与反思

(1)完成该实验用到的知识点

  1. 网页请求(requests.get、requests.post)
  2. post 请求参数设置;(需要提交表单数据)
  3. 数据解析(BeautifulSoup 、select方法)
  4. 文件写入(json)
  5. 分词处理(jieba)、停用词处理
  6. 图片读取(Image.open)
  7. 词云生成(WordCloud)

(2)收获

通过完成该实验,我了解了动态网页的加载方式和POST网络请求的方法,更熟练地掌握了数据解析中css解析器调用select方法进行数据解析的方式,学会了如何从动态网页爬取信息保存为文本和图片,了解了动态网页使用POST网络请求爬取的方法,巩固了理论课程所学的知识。

(3)遇到的问题和不足

  1. 读取写入的文件(json格式)时出现错误,通过逐行读取(readlines()) 解决了该问题
  2. 生成词云时,没有文字显示,通过设定字体样式(font_path)解决
  3. 没有非常清晰的思路,编程速度偏慢,应当提升编程速度
  4. 格式也需要尽可能规范,多给代码添加一些注释方面阅读,也方便对程 序的修改和完善

网络爬虫(动态网页爬取关于混合动力汽车的论文数据)相关推荐

  1. Python爬虫: 单网页 所有静态网页 动态网页爬取

    Python爬虫: 单网页 所有静态网页 动态网页爬取 前言:所有页代码主干均来自网上!!!感谢大佬们. 其实我对爬虫还挺感兴趣的,因为我玩instagram(需要科学上网),上过IG的人都知道IG虽 ...

  2. [day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrapy简介 4. ...

  3. [day1]python网络爬虫实战:爬取美女写真图片

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  4. [day2]python网络爬虫实战:爬取美女写真图片(增强版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  5. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

  6. Python数据分析:爬虫从网页爬取数据需要几步?

    对于数据分析师来说,数据获取通常有两种方式,一种是直接从系统本地获取数据,另一种是爬取网页上的数据,爬虫从网页爬取数据需要几步?总结下来,Python爬取网页数据需要发起请求.获取响应内容.解析数据. ...

  7. Python网络爬虫数据采集实战:同花顺动态网页爬取

    前文的爬虫都建立在静态网页基础之上,首先通过请求网站url获取到网页源代码.之后对源代码进行信息提取进而存储即可,本文则针对动态网页进行数据采集,首先介绍Ajax相关理论,之后实战爬取同花顺动态网页, ...

  8. webmagic+selenium模拟浏览器启动(动态网页爬取方法之一的第一步)

    现在绝大多数网页都是动态生成的,那么学习爬虫就意味着更加困难.若是静态网页,只需要了解如何连接网络和分析网页源代码提取标签信息即可,但是动态网页的话,就需要使用到一些特定的框架来爬取了.比较实用的爬取 ...

  9. 网络爬虫之scrapy爬取某招聘网手机APP发布信息

    1 引言 过段时间要开始找新工作了,爬取一些岗位信息来分析一下吧.目前主流的招聘网站包括前程无忧.智联.BOSS直聘.拉勾等等.有段时间时间没爬取手机APP了,这次写一个爬虫爬取前程无忧手机APP岗位 ...

最新文章

  1. (三)Amazon Lightsail 部署LAMP应用程序之连接到Lightsail数据库
  2. node 使用 download-git-repo 下载 github 代码
  3. 在云服务器上执行C程序和python程序(centos系统)
  4. 机器学习实战-神经网络-21
  5. alook浏览器js扩展网站_备用浏览器Alook所能实现的功能果真强大(文末有alook兑换码抽奖)...
  6. Ajax通讯异常12002,前端MVC框架[02] 发送AJAX请求及建立连接池
  7. unix和linux命令_Linux / Unix系统中SSH命令的用法
  8. mapreduce数据压缩
  9. Linux内核配置.config文件
  10. Java:javax.mail通过163服务器发送邮件
  11. 元宇宙火了,智能家居跟不跟?
  12. 基于内容推荐算法详解(比较全面的文章)
  13. html5 swipejs,移动web最简洁的滑动效果Swipe JS(适合初学者)
  14. Less -- 初见less(Less介绍 初次使用less 使用考拉编译less 盒子居中)
  15. poi操作word常用操作方法,word工具包
  16. microsoftstore连不上网_Microsoft Store登录不了怎么办 Microsoft Store登录不了解决方法...
  17. 颜值为王 美图M8成京东618新机好评榜最大黑马
  18. 广交会创建直播间注意事项丨汇信外贸软件
  19. 请出中本聪,迎接新世界(6-10)
  20. 免费的项目管理软件有哪些

热门文章

  1. NSLog不输出日志问题
  2. 关于MySQL拒绝访问的解决方法
  3. 七、DevOps学习笔记
  4. 湖南中创教育PMP 七个项目管理思维帮助你轻松带好项目
  5. Unicode 上角标下角标,可用于代码字符串中
  6. S标签肽,H2N-KETAAAKFERQHMDS-OH
  7. unity hlsl 库函数
  8. 如何在Excel中将多个Excel文件批量转换为CSV文件?
  9. 有道云笔记不同步_mac中有道云笔记不能同步解决办法介绍
  10. Java语言平台的三大版本