【问题标题】:How to webscrape PDFs that are hidden under the selection option?如何网页抓取隐藏在选择选项下的 PDF?
【发布时间】:2021-09-11 02:14:06
【问题描述】:

我正在尝试使用 python 从网站下载 >100 个 pdf。但是,这些 pdf 文件隐藏在选择选项下。例如:

  • 选项 1
  • 选项 2
  • 选项 3 ...

那么,如果我选择选项 1,我会说谎:

  • 选项 1
    • 信息 1 的可点击链接 [文件 1 的可点击链接]
    • 信息 2 的可点击链接 [文件 2 的可点击链接]
    • 信息 3 的可点击链接 [文件 3 的可点击链接]
    • 信息 4 的可点击链接 [文件 4 的可点击链接] ...
  • 选项 2
  • 选项 3

一旦我按下,例如,“文件 1 的可点击链接”,图片就会弹出,在弹出窗口的右上角有一个“查看 PDF”选项。现在如何为选项 1 下的每个文件循环下载 PDF?我是网络抓取的新手,非常感谢您的帮助。

谢谢!

【问题讨论】:

  • 可以分享网址吗?
  • 此页面上的 PDF 文件在哪里?
  • 按[地图]。弹出窗口将出现。然后,在弹出窗口的右上角有一个PDF选项。
  • 我尝试研究已经回答的类似问题,但考虑到我的网站格式具有多个下拉选项,它们似乎不是网络抓取 pdf。此外,一旦您按下查看 PDF,它将带您到另一个链接,该链接将包含实际的 PDF 链接。这是感兴趣的链接。

标签: python web-scraping pdf-scraping


【解决方案1】:

您似乎可以从链接标识符自动构建 PDF Url。例如:

import requests
from bs4 import BeautifulSoup

url = "https://www12.statcan.gc.ca/census-recensement/2016/dp-pd/prof/search-recherche/lst/results-resultats.cfm?Lang=E&TABID=1&G=1&Geo1=&Code1=&Geo2=&Code2=&GEOCODE=35&type=0"
map_url = "https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/{id1}/{id2}.pdf"

soup = BeautifulSoup(requests.get(url).content, "html.parser")

for a in soup.select("a[data-dguid]"):
    id_ = a["data-dguid"]
    m = map_url.format(id1=id_[4:9], id2=id_)
    print("{:<60} {}".format(a["data-geoname"], m))

打印:


...

Map: Arthur [Population center], Ontario                     https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05100022.pdf
Map: Atikokan [Population center], Ontario                   https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05100028.pdf
Map: Attawapiskat 91A [Population center], Ontario           https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05101497.pdf
Map: Aylmer [Population center], Ontario                     https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05100030.pdf
Map: Ayr [Population center], Ontario                        https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05100031.pdf
Map: Azilda [Population center], Ontario                     https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05101498.pdf
Map: Ballantrae [Population center], Ontario                 https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05101370.pdf
Map: Barrie [Population center], Ontario                     https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05100043.pdf
Map: Barry's Bay [Population center], Ontario                https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05100044.pdf
Map: Bath [Population center], Ontario                       https://www12.statcan.gc.ca/census-recensement/geo/maps-cartes/pdf/S0510/2016S05101403.pdf

...

【讨论】:

  • 你好安德烈,这太棒了!我会以此为出发点,并尝试过滤掉那些感兴趣的东西。然后我还可以遍历每个链接以下载 pfds。如果我有任何问题,请允许我回复您。
  • 你好安德烈,另一个问题。从上述加拿大人口普查局的同一个主链接开始,我将如何下载 CSV 文件,或者更确切地说打印出 CSV 文件的地址,就像对上面的 pdf 所做的那样?可以在此处查看 CSV 文件的示例:www12.statcan.gc.ca/census-recensement/2016/dp-pd/prof/details/….
  • @IsaacA 为了不弄乱评论部分,我建议在 StackOverflow 上打开一个新问题。我会试着看看。
  • 明白。我很快就会这样做。我将结束这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2014-02-27
相关资源
最近更新 更多