使用python爬取NDSS官網的論文


1.問題背景

 

為了下載NDSS2019年的論文集,頁面中有給出所有論文的鏈接,通過正則匹配來獲取論文下載鏈接和論文名。

通過開發者模式,我們可以找到下載論文的頁面(https://www.ndss-symposium.org/ndss-program/ndss-symposium-2019-program/)的html代碼,然后分析我們需要的信息在html中有什么相似性,怎么樣制定匹配規則。

 

 我之前的想法是找到鏈接在對應html中的位置,然后下載所有html中對應位置的內容就好了,但是...這個頁面也太復雜了,正則化匹配會來得更簡單。

&台式機上之前沒有裝pycharm,所以現裝了一個pycharm,參考的這個鏈接:https://www.runoob.com/w3cnote/pycharm-windows-install.html

2.解決方案

import os
import re
import urllib

import requests

def get_context(url):
    web_context=requests.get(url)
    return web_context.text

url = 'https://www.ndss-symposium.org/ndss-program/ndss-symposium-2019-program/'
web_context=get_context(url)

name_list=re.findall(r"(?<=/\">).+(?=</a>)",web_context)    #論文名,用來保存
link_list=re.findall(r"(?<=href=\").+(?=\">Paper</a>)",web_context)    #鏈接地址,用來下載

print(str(link_list))
print(str(name_list))
local_dir='D:\\nudt\\NDSS2019\\'
if not os.path.exists(local_dir):
    os.makedirs(local_dir)

cnt=0

while cnt < len(link_list):
    file_name = name_list[cnt+1]  #這里加1是因為提取出來的name_list多了一個與論文名無關的name,加1才能使名字和論文鏈接對應起來。
    download_url = link_list[cnt]
    print(download_url)
    #將標點符號和空格替換為'_',防止由於如:字符等不能保存文件
    file_name = re.sub('[:\?/]+',"_",file_name).replace(' ','_')
    print(file_name)
    file_path = local_dir + file_name + '.pdf'
    print(file_path)
    print(download_url)
    #download
    print('['+str(cnt)+'/'+str(len(link_list))+'] Downloading' + file_path)
    try:
        # urllib.urlretrieve(download_url, file_path)
        r = requests.get(download_url)
        with open(file_path, 'wb+') as f:
            f.write(r.content)
    except Exception:
        print('download Fail: '+file_path)
    cnt += 1
print('Finished')

 參考了https://blog.csdn.net/a529975125/article/details/79479438這位大佬的做法。

主要有以下幾點需要解釋一下:

1)我通過urllib.urlretrive()函數下載會失敗,所以直接通過文件操作來保存了。

2)而且我這里爬取出來的結果,大家可以發現name_list的第一個值不是論文名,也就是name_list的第二個值才對應link_list的第一個值,所以在保存的時候要進行+1處理,這個大家可以根據自己爬取結果,各取所需啦。只要能對應上就好!

 

3)但是我不知道是自己下載網速的問題還是啥,會出現下載着就中斷的問題(不是直接停止運行,而是下載一篇論文的時候下很久都沒有下完),這個時候修改cnt=你現在下到了哪一篇論文,就可以接着下載了,不需要重新又開始從頭下。這種情況大概在我爬取89篇文章中出現了三次,所以我還是能接受這個實際效果。

Finally,貼上折騰好久終於有了的運行結果:(開心!)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM