使用python爬蟲抓取學術論文
阿新 • • 發佈:2019-01-02
介紹
這是一個很小的爬蟲,可以用來爬取學術引擎的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