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]
    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这位大佬的做法,但是我通过urllib.urlretrive()函数下载会失败,所以直接通过文件操作来保存了

01-08 11:20