【问题标题】:Scraping pdfs from this web从这个网络上抓取 pdf
【发布时间】:2018-01-15 20:07:16
【问题描述】:

我正在尝试从这个网站使用 python 2.7 报废:

http://www.motogp.com/en/Results+Statistics/

我想取消主要的,它有很多类别(事件),出现在 MotoGP Race Classification 2017 蓝色字母旁边的那个

在那次报废之后也是如此。到目前为止,我有:

import re
from bs4 import BeautifulSoup
from urllib.request import urlopen
url = "http://www.motogp.com/en/Results+Statistics/"
r  = urlopen(url).read()
soup = BeautifulSoup(r)
type(soup)

match = re.search(b'\"(.*?\.pdf)\"', r)
pdf_url="http://resources.motogp.com/files/results/2017/ARG/MotoGP/RAC/Classification" + match.group(1).decode('utf8')

链接是这种类型:

http://resources.motogp.com/files/results/2017/AME/MotoGP/RAC/Classification.pdf?v1_ef0b514c

所以我应该添加“?”在字符之后。主要问题是如何从一个事件切换到另一个事件来获取这种格式的所有链接。

【问题讨论】:

  • 如果我没记错,那么您唯一的目标就是让pdf 链接与每个事件相关联,对吧?如果是,您需要使用 selenium 或任何可以执行点击的浏览器模拟器,因为要使这些 pdf 链接可见,必须在每个事件上启动点击?
  • 是的,我想获取链接。

标签: python pdf web-scraping


【解决方案1】:

根据您上面提供的描述,这是如何获得那些pdf链接:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
driver.get("http://www.motogp.com/en/Results+Statistics/")

for item in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#event option"))):
    item.click()
    elem = wait.until(EC.presence_of_element_located((By.CLASS_NAME, "padleft5")))
    print(elem.get_attribute("href"))
    wait.until(EC.staleness_of(elem))

driver.quit()

部分输出:

http://resources.motogp.com/files/results/2017/VAL/MotoGP/RAC/worldstanding.pdf?v1_8dbea75c
http://resources.motogp.com/files/results/2017/QAT/MotoGP/RAC/Classification.pdf?v1_f6564614
http://resources.motogp.com/files/results/2017/ARG/MotoGP/RAC/Classification.pdf?v1_9107e18d
http://resources.motogp.com/files/results/2017/AME/MotoGP/RAC/Classification.pdf?v1_ef0b514c
http://resources.motogp.com/files/results/2017/SPA/MotoGP/RAC/Classification.pdf?v1_ba33b120

【讨论】:

  • 我怎样才能为这些年添加一个循环?我正在尝试:for year in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "#handle_season span"))): year.click()
  • 您应该创建另一个线程来描述您当前的需求,并在此处放置该帖子的链接。我会看看。我现在正在做一个项目。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-02-02
  • 2019-07-22
  • 2017-10-16
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
相关资源
最近更新 更多