1. 程式人生 > >使用python爬蟲抓取學術論文

使用python爬蟲抓取學術論文

介紹

這是一個很小的爬蟲,可以用來爬取學術引擎的pdf論文,由於是網頁內容是js生成的,所以必須動態抓取。通過selenium和chromedriver實現。可以修改起始點的URL從穀粉搜搜改到谷歌學術引擎,如果你的電腦可以翻牆。可以修改關鍵字 和 搜尋頁數 搜尋需要的論文

資源下載

selenium和chromedriver,2015-3月最新版本下載地址 http://pan.baidu.com/s/1qWLqqqK
注意執行程式前 啟動selenium 命令為 java -jar selenium.jar

python程式碼

#!/usr/bin/python
#encoding=utf-8
__author__ = 'Administrator' from selenium import selenium if __name__ == "__main__": import os from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait chromedriver = "C:\Program Files\Google\Chrome\Application\chromedriver.exe" os.environ["webdriver.chrome.driver"
] = chromedriver driver = webdriver.Chrome(chromedriver) driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") driver.get('http://www.gfsoso.com/scholar') inputElement = driver.find_element_by_name("q") searchWord="sentiment lexicon" inputElement.send_keys(searchWord) inputElement.submit() currentURL=driver.current_url urlList=[] localDir = 'down_pdf\\'
fileOut = localDir + searchWord + ".txt" import urllib, re,codecs,sys fileOp = codecs.open(fileOut, 'a', sys.getdefaultencoding()) for i in range(0,10):#需要抓取的頁數 pdf_url = driver.find_elements_by_css_selector("a") for k in pdf_url: try: z= k.get_attribute("href") if '.pdf' in z and z not in urlList: urlList.append(z) print z except: import time time.sleep(1) continue contents=driver.find_elements_by_css_selector('h3') for ct in contents: print ct.text #fileOp.write('%s\n' %(ct.text))#把頁面上所有的文章名稱存到txt,有時會報錯 driver.get(currentURL+"&start="+str(i*10)+"&as_sdt=0,5&as_ylo=2008") import time time.sleep(3) print len(urlList) for everyURL in urlList: #遍歷列表的每一項,即每一個PDF的url wordItems = everyURL.split('/') #將url以/為界進行劃分,為了提取該PDF檔名 for item in wordItems: #遍歷每個字串 if re.match('.*\.pdf$', item): #查詢PDF的檔名 PDFName = item #查詢到PDF檔名 localPDF = localDir +searchWord+"_"+ PDFName try: urllib.urlretrieve(everyURL, localPDF) #按照url進行下載,並以其檔名儲存到本地目錄 except Exception,e: continue