带有嵌入式 PDF 查看器的 Python 抓取 ASP 站点

Ste*_*all 5 html python pdf asp.net

在这里的第一篇文章,任何帮助将不胜感激:)。我正在尝试从带有嵌入式 pdf 查看器的网站上抓取。据我所知,没有办法直接下载 PDF 文件。

浏览器将 pdf 显示为多个 PNG 图像文件,问题是 png 文件也不能直接访问。它们从原始 pdf 呈现,然后显示。

去掉标题的 URL 在代码块中。

pdf 查看器的原始 URL(我使用的是第二个 URL)和呈现 pdf 的链接包含在代码中。

我的策略是使用 urllib 拉取 viewstate 和 eventvalidation,然后使用 wget 从站点下载所有文件。这种方法在没有发布数据的情况下也能工作(第 1 页)。我从 fiddler(嗅探工具)获取其余参数

但是当我使用发布数据来指定页面时,我在尝试下载图像文件时会收到这样的 405 错误。但是,它可以毫无问题地下载实际的 html 页面,只是没有随附的 png 文件。这是 wget 错误的示例。

HTTP 请求已发送,正在等待响应... 405 Method Not Allowed 2014-03-27 17:09:38 ERROR 405: Method Not Allowed。

由于我无法直接访问图像文件链接,因此我认为使用 wget 抓取整个页面将是我最好的选择。如果有人知道一些更好的选择,请告诉我:)。由于下载的 html 文件设置为我在参数中指定的页面,因此帖子数据似乎至少部分起作用。

根据提琴手的说法,该站点会自动对图像文件进行获取请求。但是,我不太确定如何模拟这一点。

任何帮助表示赞赏,感谢您的时间!

imglink = 'http://201.150.36.178/consultaexpedientes/render/2132495e-863c-4b96-8135-ea7357ff41511.png'
origurl = 'http://201.150.36.178/consultaexpedientes/sistemas/boletines/wfBoletinVisor.aspx?tomo=1&numero=9760&fecha=14/03/2014%2012:40:00'

url = 'http://201.150.36.178/consultaexpedientes/usercontrol/Default.aspx?name=e%3a%5cBoletinesPdf%5c2014%5c3%5cBol_9760.pdf%7c0'
f = urllib2.urlopen(url)
html = f.read()

soup = BeautifulSoup(html)
eventargs = soup.findAll(attrs={'type':'hidden'})
reValue = re.compile(r'value=\"(.*)\"', re.DOTALL)
viewstate = re.findall(reValue, str(eventargs[0]))[0]
validation = re.findall(reValue, str(eventargs[1]))[0]

params = urllib.urlencode({'__VIEWSTATE':viewstate,
                           '__EVENTVALIDATION':validation,
                           'PDFViewer1$PageNumberTextBox':6,
                           'PDFViewer1_BookmarkPanelScrollX':0,
                           'PDFViewer1_BookmarkPanelScrollY':0,
                           'PDFViewer1_ImagePanelScrollX' : 0,
                           'PDFViewer1_ImagePanelScrollY' : 0,
                           'PDFViewer1$HiddenPageNumber':6,
                           'PDFViewer1$HiddenAplicaMarcaAgua':0,
                           'PDFViewer1$HiddenBrowserWidth':1920,
                           'PDFViewer1$HiddenBrowserHeight':670,
                           'PDFViewer1$HiddenPageNav':''})


command = '/usr/bin/wget -E -H -k -K -p --post-data=\"%s'  % params + '\" ' + url
print command
os.system(command)
Run Code Online (Sandbox Code Playgroud)