
大家好,我是代码新人。如图所示,这是我用python爬取知网文献,得到了文献的标题和摘要。下面我将向大家展示我的python代码,请各位批评指教。我的代码可以:1.自动点开知网,并在知网首页搜索框以“人工智能”(或任意其他)为主题进行搜索;2.得到搜索结果后,python程序将得到搜索结果网页的页码数,并逐页爬取数据;3.根据每页搜索结果,逐一点开每条文献链接并爬取该条文献的标题和摘要。
下面是我的代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys
import time
import re
browser = webdriver.Chrome()
url="https://www.cnki.net/"
browser.get(url)
txtBox= browser.find_element(By.CLASS_NAME,'search-input')
txtBox.send_keys("人工智能")
txtBox= browser.find_element(By.CLASS_NAME,'search-btn')
txtBox.click()
browser.switch_to.window(browser.window_handles[1])
time.sleep(5)
page_mark=browser.find_element(By.CLASS_NAME,'countPageMark').text
def find_all_pages(page_mark):
pageRule=re.compile(r'(\d)/(\d{3})')
all_pages=re.search(pageRule,page_mark)
return int(all_pages.group(2))
allpages=find_all_pages(page_mark)
for page in range(1,allpages+1):
time.sleep(10)
all_liter = WebDriverWait(browser, 10).until(EC.presence_of_all_elements_located((By.CLASS_NAME, 'fz14')))
time.sleep(5)
print("您现在在第%s页" % page)
i = 0
for i in range(len(all_liter)):
all_liter[i].click()
n2 = browser.window_handles
browser.switch_to.window(n2[-1])
art_title = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body/\
div[2]/div[1]/div[3]/div/div/div[3]/div/h1'))).text
abstract = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.XPATH, '/html/body\
/div[2]/div[1]/div[3]/div/div/div[4]/span[2]'))).text
print(art_title, abstract)
n3 = browser.window_handles
if len(n3) > 2:
browser.close()
browser.switch_to.window(n2[1])
PageNext=browser.find_element(By.TAG_NAME,'body')
PageNext.send_keys(Keys.RIGHT)
我的代码一共仅有43行,第12行的txt.send_keys()是搜索主题,我搜索的是“人工智能”,可以换任意的主题搜索。
我的代码参考了知乎文章:《Python爬虫实战(5) | 爬取知网文献信息(已优化代码)》
进行知网爬虫的前提:
1.需要在终端窗口(shell/console,不是python文件里)安装selenium包,命令是:pip install selenium;2.需要有firefox/chrome浏览器;3. 以上两种浏览器必须安装插件,firefox需要安装geckodriver,chrome需要安装chromedriver,安装方法请参考:优快云 《MAC如何安装和配置chromedriver》。
推荐教材:洪锦魁《python王者归来》