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

【原文链接】http://www.changxuan.top/?p=146

由于“打怪”失败,最近一直在牛客网上刷题复习备战春招。其中有个 Java专题复习题库,我刷着刷着就想把它爬下来!那么就开始吧。

页面是这个样子的,

293bb244a65b4633bb087026f547c0db.jpg 列表页

db72c7e545bc424784724803101c3d77.jpg 详情页

分析网页链接,发现没有加密,例如第一题的详情页为:https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page=1 可以先自行构造链接,代码如下:

urls = ['https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page={}'.format(str(i)) for i in range(1,121)]

在选中要抓取的数据部分,右击【检查】,发现答案都在 class="design-answer-box" 标签内。使用谷歌浏览器插件 XPath helper 进行 Copy XPath ,“/html/body/div[1]/div[2]/div[2]/div[2]/div[1] ”。

3c71396a520b45b9b0eccd2de34b63fb.jpg 测试结果

主要思路:

构造网页链接

编写爬虫函数(保存数据到文件)

for 循环进行调用函数

代码如下:

import requests

import time

from lxml import etree

header = {

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate, br',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Connection': 'keep-alive',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 '

'(KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'

}

#/html/body/div[1]/div[2]/div[2]/div[2]/div[1]

f = open('./JavaPros.md','a+')

def get_info(url,n):

res = requests.get(url, headers=header)

selector = etree.HTML(res.text)

question = '##### '+str(n)+'、'+selector.xpath('/html/body/div[1]/div[2]/div[2]/div[1]/div[2]/text()')[0].lstrip('\n')+'\n'

answer = selector.xpath('/html/body/div[1]/div[2]/div[2]/div[2]/div[1]//text()')

answer = "".join(answer)

answer = '```\n'+answer.lstrip('\n')+'\n```\n'

f.write(question+answer)

if __name__ == '__main__':

urls = ['https://www.nowcoder.com/ta/review-java/review?query=&asc=true&order=&page={}'.format(str(i)) for i in range(1,121)]

i = 1;

for url in urls:

print(url)

get_info(url,i)

i = i + 1

time.sleep(1)

f.close()

结果:

c06a83f2e0b84d789d36c5eed175bd5c.jpg 数据文件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值