ReMe/test/test3.py

92 lines
2.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
from io import BytesIO
import pycurl
from PyPDF2 import PdfReader
DOWNLOAD_DIR = "./"
# 随机User-Agent列表
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
]
def get_random_user_agent():
"""获取随机User-Agent"""
import random
return random.choice(USER_AGENTS)
def download_pdf(pdf_url, filename):
"""
使用pycurl下载PDF文件模拟curl请求
参数:
pdf_url (str): PDF文件的URL
filename (str): 保存文件名(不含路径)
返回:
bool: 是否下载成功
"""
save_path = os.path.join(DOWNLOAD_DIR, filename)
buffer = BytesIO()
c = pycurl.Curl()
try:
# 设置curl选项
c.setopt(pycurl.URL, pdf_url)
c.setopt(pycurl.WRITEDATA, buffer)
c.setopt(pycurl.FOLLOWLOCATION, True)
c.setopt(pycurl.MAXREDIRS, 5)
c.setopt(pycurl.CONNECTTIMEOUT, 30)
c.setopt(pycurl.TIMEOUT, 300)
# 设置防爬虫headers
headers = [
f"User-Agent: {get_random_user_agent()}",
"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
"Referer: https://data.eastmoney.com/",
"Accept-Language: zh-CN,zh;q=0.9",
]
c.setopt(pycurl.HTTPHEADER, headers)
# 执行下载
c.perform()
# 验证响应
if c.getinfo(pycurl.HTTP_CODE) != 200:
print(f"下载失败 HTTP {c.getinfo(pycurl.HTTP_CODE)}")
return False
# 保存文件
with open(save_path, "wb") as f:
f.write(buffer.getvalue())
print(f"✓ 成功下载 {filename}")
return True
except pycurl.error as e:
errno, errstr = e.args
print(f"pycurl错误({errno}): {errstr}")
return False
except Exception as e:
print(f"下载异常: {str(e)}")
return False
finally:
c.close()
buffer.close()
if __name__ == "__main__":
url_list = [
"https://pdf.dfcfw.com/pdf/H3_AP202508061722531920_1.pdf?1754495126000.pdf",
]
url_list = [x.split("?")[0] for x in url_list]
for url in url_list:
name = url.split("_")[1]
download_pdf(url, f"{name}.pdf")