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. conda-forge,conda,-c的理解
  2. 进程(process)和线程
  3. (chap1 web网络基础) HTTP协议相关的各个协议(2)
  4. Windows内核实验005 Inline Hook
  5. 【MatConvnet速成】MatConvnet图像分类从模型自定义到测试
  6. html调用applet
  7. ASP.NET Core Razor 标签助手 - ASP.NET Core 基础教程 - 简单教程,简单编程
  8. EMNLP 2021 | 大道至简:微软提出可生成高质量文本表示的预训练语言模型
  9. 讲述华为发布鸿蒙系统,华为鸿蒙系统正式版首批升级名单公布:这8款机型用户有福了!...
  10. 虚拟顺丰快递生成器_电商时代|从顺丰优选看,生鲜冷链物流发展面临的问题及解决思路...
  11. idea解决编译时出现的未结束的字符文字等错误
  12. 从 0 到 1:全面理解 RPC 远程调用!
  13. Windows内核研究工具
  14. Linux系统添加用户、管理员权限
  15. android简繁体切换快捷键,我的Android进阶之旅------Android中如何高效率的进行简繁体转换...
  16. 调用百度地图API与语音API实现简易地图语音导航
  17. android国际化(文字、布局、语音、多渠道打包)
  18. 轻便提示插件tipTip
  19. goldendict在线子典 goldendict
  20. VB定义字符串数组并赋值

热门文章

  1. System.currentTimeMillis()的慎用
  2. 用MFC如何高效地绘图
  3. shell 免杀aspx_避开eval关键字,打造免杀一句话木马
  4. linux ubuntu系统打开终端
  5. SELinux is preventing /usr/sbin/httpd from name_bind access on the tcp_socket port
  6. 祝大家元旦快乐,新年快乐!
  7. Linux搭建Socks5代理服务器
  8. python实现——根据txt文件进行文件复制并重命名
  9. J2ObjC - 谷歌的Java转Objective-C的代码转换工具
  10. Java游戏服务器成长之路——弱联网游戏篇(源码分析)