欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

一种绕过限制下载论文的思路

来源:本站整理 作者:tammypi 时间:2018-04-02 TAG: 我要投稿

注:本文下面的内容仅讨论绕过思路,作为技术交流之用。大家下载论文还是应该通过正规渠道,付费下载,尊重各位站长的劳动成果。敏感图片和代码中涉及站点的内容均已打码。
有时候要研究技术,我们也需要下载一些论文来看看的。一些论文站点,虽然提供预览功能,但是下载却是收费的。
举个例子,如下站点:

当我们点击“同意并开始全文预览”按钮时,是有一个弹出窗口来预览论文的。

但是当我们点击“下载”按钮时,却提示需要收费。

一方面它单篇论文的收费实在是挺贵的;另外一方面,我们可能更倾向于把论文批量下载到本地,等到有时间时慢慢读完。这该怎么办呢?
我们F12看看预览页面的内容:

可以清晰的看到,id=”pdf”的div下的每个子节点div对应着论文的每一页,而每一个子div中包含的img标签对应的图片则是每一页的内容。我们将img标签的src中的链接复制出来,粘贴在浏览器的新页签中,其实是可以看到本页论文内容,而右键“保存图片”是可以将此页论文保存到本地的。

以上就是手动绕过限制下载论文的思路。但是有的论文页数实在太多,手动逐个复制链接下载实在有些效率低下,所以我们可以写个脚本来提升效率。
#coding:utf-8
import traceback
import urllib2
import urllib
import sys
import Queue
import os
import time
from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(30)
host = "此处打码"
searchurl = "https://" + host + "/index.php?m=Search&a=index"
dstpath = "h:/downloadpdf"
download_queue = Queue.Queue()
reload(sys)
sys.setdefaultencoding("utf-8")
class UnicodeStreamFilter: 
  def __init__(self, target): 
      self.target = target 
      self.encoding = 'utf-8' 
      self.errors = 'replace' 
      self.encode_to = self.target.encoding 
  def write(self, s): 
      if type(s) == str: 
          s = s.decode("utf-8") 
      s = s.encode(self.encode_to, self.errors).decode(self.encode_to) 
      self.target.write(s) 
       
if sys.stdout.encoding == 'cp936': 
  sys.stdout = UnicodeStreamFilter(sys.stdout)
def get_search_result(keywords):
  data = {"q":keywords}
  headers = {"cookie":"访问论文站点时f12看到的cookie填入此处,此处打码"}
  req = urllib2.Request(url=searchurl,data=urllib.urlencode(data),headers=headers)
  res = urllib2.urlopen(req)
  content = res.read()
  soup = BeautifulSoup(content, features="lxml")
  divlist = soup.find_all(class_="item-title")
  if divlist is not None and len(divlist) > 0:
      for divitem in divlist:
          alist = divitem.find_all("a")
          if alist is not None and len(alist) > 0:
              ahref = alist[0].attrs["href"]
              title = alist[0].attrs["title"]
              download_queue.put([
                  "http://%s%s"%(host,ahref,),
                  title
              ])
def save_pdf(title, imgls, chost):
  headers = {
      "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载