【原文鏈接】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] ”。
主要思路:
- 構造網頁鏈接
- 編寫爬蟲函數(保存數據到文件)
- 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()
結果: