0

我正在开展一个项目,其目的是从新闻文章(媒体网站)中检索所有信息,为此我正在使用运行良好的图书馆报纸 3K。

但是我有一个关于一些 url(重定向链接)的问题,根据我的研究,paper3k 不加载重定向 url,它只将发送的 url 作为参数。

这是我要处理的链接示例:

url = "wtm.actualite.20minutes.fr/redirection.html?m=3e2b20a2f1f6dd3c60608f54d7ad4dc5&c=fr&u=https%3A%2F%2Fwww.20minutes.fr%2Fmonde%2F2943823-20210103-bahamas-disparition-bateau-20-personnes-bord %3Fxtor%3DEREC-182-%5Bactualite%5D&dc=yt0U%2FI8COMJyjwQQ1fA2kVEXpoP0nsZydMTZS6jTm2DdKasFuV%2FVA7rEphhqMfGAy%2FlztUlVN4MJt5tg%2FQXfJwmXMRQL8g3Gfwhl%2BsjkkYmd%2BDxDUhb%2BpPRL%2BNsiDETNQeP3MmrQ6ATGJT%2Blf46Zg4DHd%2FzaXy%2B7UAuxatp2UcVd39HKuuMfQHmyDV%2BAxSAJrd4x5CxHqy3uTtZoQEjwGdZ%2FRtoa7YLOWLKhN9tg4TM%3D"

所以这个 url 的目标是获取正确的 url(重定向后),然后将其发送到 news3K。

我尝试了以下解决方案,但它们对我不起作用;

1 - 使用库请求如下response = requests.get(url, verify=False, allow_redirects=True)

2-使用机械化库如下:

br = mechanize.Browser()
resp = br.open(url)

我希望拥有与使用 webbrowser 时相同的过程(无需打开浏览器)

import webbrowser
webbrowser.open_new(url)

终于有权利了

网址: https://www.20minutes.fr/monde/2943823-20210103-bahamas-disparition-bateau-20-personnes-bord?xtor=EREC-182-[actualite]

提前感谢您的回复:)

4

2 回答 2

0

重定向不是来自路径转发,而是来自实际的 html 内容。您可以通过使用以下代码从响应中下载文本来验证这一点。

with open ("actualite.html", "w") as f:
    f.write(response.text)

如果您打开本地文件,它将重定向。浏览器执行重定向而不是域服务器。

要解决这个问题,您可以使用使用浏览器的工具,例如 selenium。

编辑:这是您可以使用 selenium 执行此操作的方法:

from selenium import webdriver
url = "https://wtm.actualite.20minutes.fr/redirection.html?m=3e2b20a2f1f6dd3c60608f54d7ad4dc5&c=fr&u=https%3A%2F%2Fwww.20minutes.fr%2Fmonde%2F2943823-20210103-bahamas-disparition-bateau-20-personnes-bord%3Fxtor%3DEREC-182-%5Bactualite%5D&dc=yt0U%2FI8COMJyjwQQ1fA2kVEXpoP0nsZydMTZS6jTm2DdKasFuV%2FVA7rEphhqMfGAy%2FlztUlVN4MJt5tg%2FQXfJwmXMRQL8g3Gfwhl%2BsjkkYmd%2BDxDUhb%2BpPRL%2BNsiDETNQeP3MmrQ6ATGJT%2Blf46Zg4DHd%2FzaXy%2B7UAuxatp2UcVd39HKuuMfQHmyDV%2BAxSAJrd4x5CxHqy3uTtZoQEjwGdZ%2FRtoa7YLOWLKhN9tg4TM%3D"

options = webdriver.ChromeOptions()
options.add_argument('ignore-certificate-errors')
driver = webdriver.Chrome(chrome_options=options, executable_path=r"C:/Users/james/Documents/Selenium/chromedriver.exe")
driver.get(url)
print(driver.current_url)
于 2021-01-06T23:25:20.103 回答
0

@James 非常感谢您的回答!这对我帮助很大。

我目前正在使用 aws 胶水,所以我被迫只使用某些库(我猜 Selenium 不可用)但是这是我找到链接的方法(当然遵循你的逻辑):

from bs4 import BeautifulSoup
import re
from urllib.parse import unquote

url = "https://wtm.actualite.20minutes.fr/redirection.html?m=3e2b20a2f1f6dd3c60608f54d7ad4dc5&c=fr&u=https%3A%2F%2Fwww.20minutes.fr%2Fmonde%2F2943823-20210103-bahamas-disparition-bateau-20-personnes-bord%3Fxtor%3DEREC-182-%5Bactualite%5D&dc=yt0U%2FI8COMJyjwQQ1fA2kVEXpoP0nsZydMTZS6jTm2DdKasFuV%2FVA7rEphhqMfGAy%2FlztUlVN4MJt5tg%2FQXfJwmXMRQL8g3Gfwhl%2BsjkkYmd%2BDxDUhb%2BpPRL%2BNsiDETNQeP3MmrQ6ATGJT%2Blf46Zg4DHd%2FzaXy%2B7UAuxatp2UcVd39HKuuMfQHmyDV%2BAxSAJrd4x5CxHqy3uTtZoQEjwGdZ%2FRtoa7YLOWLKhN9tg4TM%3D"
response = requests.get(url, verify=False, allow_redirects=True)

if response.status_code == 200:
    page = response.text
    # parse the html using beautifulsoup
    html_content = BeautifulSoup(page, 'html.parser')
    soup = html_content
    
href = soup.find("link", href = True)
href = href['href']

new_url = unquote(unquote(href))

再次感谢您的帮助,您是英雄 :)

于 2021-01-07T13:03:12.703 回答