1 目标

爬取牛客网上关于《数据结构》的试题。
试题链接

进入网页可以看到,如果选择《数据结构》的某个知识点组卷,一次最多只能出30题。

因此,想法就是用程序一次将30题全部爬下。随后生成新的试卷再进行爬虫。

2 实现思路

2.1 最初思路

  1. 访问第一题的url
  2. 爬取试题
  3. 找到下一题的url后,重复1.2操作,直到爬完30题

很遗憾,打开devtools看试题页的元素,发现必须先登录才能有试题页面,
因此问题来到了登录上。

用devtools看登录过程,没有相应的帐号、密码信息,因此无法用帐号密码post方式登录。但是注意到登录页有cookie,如下图右侧,故可采用cookie方式登录。

另外发现该页面有全部试题的url,因此新的方案为

2.2 新思路

  1. 通过cookie访问第一题url,获得全部试题的url
  2. 依次访问每题的url,爬取

3 代码

# -*- coding: utf-8 -*"""
目标,爬取全部的题目以及答案
1. 利用cookie访问网页,记录全部的题目id并记录在内存中 需要把标签的属性记下来
2. 依次访问这些题目的网页,爬取问题选项和答案
3. 存储到本地文件
"""import requests
from lxml import etree
import redef pageid(url, cookie):headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36','Cookie': cookie}session = requests.Session()response = session.get(url, headers=headers)# print(response.text)selector = etree.HTML(response.text)pagelinks = []for i in range(30):apageid = selector.xpath('/html/body/div[1]/div[2]/div[2]/div[1]/ul/li['+str(i+1)+']/a/@href')pagelinks.append('https://www.nowcoder.com'+"".join(apageid))# print(pagelinks)return pagelinksdef access(urls, cookie):for url in urls:print('\n'+url)headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36','Cookie': cookie}session = requests.Session()response = session.get(url, headers=headers)selector = etree.HTML(response.text)question = re.sub("_计算机基础-链表,数组专项练习_牛客网|<span>|</span>|\n", '', selector.xpath('/html/head/title/text()')[0])rightans = re.findall("[ABCD]", selector.xpath('/html/body/div[1]/div[2]/div[2]/div[3]/h1/text()')[0])[0]print(question)print(rightans)for i in range(1, 5):content = selector.xpath('/html/body/div[1]/div[2]/div[2]/div[3]/div['+str(i)+']//text()')if len(content)<5 and content:answer = chr(ord('A')+(i-1))+':'+content[1]print(answer)if __name__ == '__main__':cookie = 'NOWCODERUID=C1F47CBEB368100B259B00921BDE1A9C; NOWCODERCLINETID=2987429E46984C805C4B748D83F50505; Hm_lvt_a808a1326b6c06c437de769d1b85b870=1582727926,1582951795,1583150899,1583296142; callBack=%2Ftest%2Fquestion%2Fdone%3Ftid%3D31053807%26qid%3D171569%26headNav%3Dwww; Hm_lpvt_a808a1326b6c06c437de769d1b85b870=1583298317; t=2B8379AABDEFC411E988236C916DCA4B; SERVERID=11b18158070cf9d7800d51a2f8a74633|1583298320|1583296137'urls = pageid('https://www.nowcoder.com/test/question/done?tid=31053807&qid=171569', cookie)# print(urls)access(urls, cookie)

4 结果

运行结果的部分截图如下

爬虫实现爬取牛客网数据结构试题相关推荐

  1. python简单实践作业答案_python入门实践四:爬取牛客网面试专项练习题及答案

    说明:个人练手python用. 操作系统:window10 x64 IDE:Pycharm 2017.2.2 Python版本:3.6.2 目标 牛客网是一个IT笔试面试的平台,提供了很多题库,今天我 ...

  2. python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  3. 如何使用 Python 爬虫爬取牛客网 Java 题库?

    [原文链接]http://www.changxuan.top/?p=146 由于"打怪"失败,最近一直在牛客网上刷题复习备战春招.其中有个 Java专题复习题库,我刷着刷着就想把它 ...

  4. java 使用webmagic 爬虫框架爬取博客园数据

    java 使用webmagic 爬虫框架爬取博客园数据存入数据库 学习记录   webmagic简介: WebMagic是一个简单灵活的Java爬虫框架.你可以快速开发出一个高效.易维护的爬虫. ht ...

  5. 爬虫练习-爬取简书网热评文章

    前言: 使用多进程爬虫方法爬取简书网热评文章,并将爬取的数据存储于MongoDB数据库中 本文为整理代码,梳理思路,验证代码有效性--2020.1.17 环境: Python3(Anaconda3) ...

  6. 牛客网获取输入rowinput_Python爬虫入门例题:抓取牛客网题目

    最近做题的时候要写一些题解,在把牛客网的题目复制下来的时候,数学公式的处理比较麻烦,所以我用Python的selenium.urllib.request和BeautifulSoup4库对题目信息进行了 ...

  7. 使用Python网络爬虫抓取牛客网题目

    文章目录 1. 背景 2. 前期准备 3. 获取网页内容 4. 内容处理 4.1. Limit 4.2. Problem Description 4.3. Input 4.4. Output 4.5. ...

  8. Java爬虫-WebMagic爬取博客图片(好色龍的網路觀察日誌)

    WebMagic爬取博客图片 最近在学习java爬虫,接触到WebMagic框架,正好拿我喜爱的博客来练习,希望龙哥(博主)不要责备我~~ 博客链接: 好色龍的網路觀察日誌 ,超级有趣的翻译漫画,持续 ...

  9. java爬虫之爬取博客园推荐文章列表

    这几天学习了一下Java爬虫的知识,分享并记录一下: 写一个可以爬取博客园十天推荐排行的文章列表 通过浏览器查看下一页点击请求,可以发现 在点击下一页的时候是执行的 post请求,请求地址为 http ...

最新文章

  1. jquery中输入验证中一个不错的效果
  2. JavaScript 运行机制详解
  3. 以消费者为中心 第四范式为企业转型准备“专属服务系统”
  4. 验证二叉搜索树Python解法
  5. SDUT 3258 Square Number 简单数学
  6. Ionic如何实现单选二级菜单切换
  7. 内部控制中对权限分配的要求、权限分配的实现方法
  8. PHP 使用session实现购物车效果(点击按钮添加数据,根据数据生成列表,删除选中的商品,点击按钮时计算金额)
  9. 计算机专业Java必读书单,高清PDF电子版下载
  10. jdk7对list进行排序(按照list中entity的某个属性比如age)
  11. KeilC51基础 改变代码的字体大小
  12. QCC3040---Log module
  13. 【5G核心网】5GC核心网之网元UDR
  14. 基于Matlab的简单视频处理
  15. 双非一本考研国防科技大学计算机,【21择校】这些高校不歧视双非,保护一志愿!...
  16. 还自己写代码?VBA录制宏了解下
  17. 自考计算机专业实践报不了名,2014年9月北京自考计算机及应用专业实践课程网报通知...
  18. 【git之路】拉取远程分支到本地
  19. 十年应用软件之路有几个还活着?
  20. 计算机病毒通过读写或复制移动,计算机病毒除通过读写或复制移动存储器上带病毒的文件传染外,另一条主要的传染途径是...

热门文章

  1. String.format()方法详解
  2. Android逆向之旅---带你解读Android中新型安全防护策略
  3. Spring中的bean是什么
  4. TYVJ 2054 [Nescafé29]四叶草魔杖 最小生成树 状态压缩/背包DP
  5. php中endfor是什么意思,PHP中冒号、endif、endwhile、endfor这些都是什么,endwhileendfor_PHP教程...
  6. python处理空缺值
  7. 基于Android Studio实现的集新闻页面+时钟页面+登录页面于一体的简单demo
  8. TK域名首次注册教程(咸干花生)
  9. react中实现粒子动画背景----particles-bg
  10. IT公司笔试面试题总结