如何使用 Python 爬蟲爬取牛客網 Java 題庫?

【原文鏈接】http://www.changxuan.top/2019/02/23/如何使用-python-爬蟲爬取牛客網-java-題庫?/

由於“打怪”失敗,最近一直在牛客網上刷題複習備戰春招。其中有個 Java專題複習題庫,我刷着刷着就想把它爬下來!那麼就開始吧。

頁面是這個樣子的,

列表頁
詳情頁

分析網頁鏈接,發現沒有加密,例如第一題的詳情頁爲: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] ”。

測試結果

主要思路:

  1. 構造網頁鏈接
  2. 編寫爬蟲函數(保存數據到文件)
  3. 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()

結果:

數據文件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章