Невозможно извлечь заголовок из некоторых URL-адресов, используя BeasutifulSoup4 / извлечение Python - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два простых python скрипта, чтобы очистить заголовок, основное изображение, описание от URL. Один использует извлечение, а другой использует BeautifulSoup4. Оба прекрасно работают с большинством URL (например, http://nytimes.com). Но в обоих случаях есть некоторые URL, которые не работают: а именно http://latimes.com, что странно, поскольку это такой большой сайт. Я сделал два разных сценария, чтобы подтвердить, что проблема не в библиотеке.

Чего мне не хватает? Может кто-нибудь помочь мне понять, почему я ничего не возвращаю?


Сценарий нет. 1:

import extraction, requests
ext = extraction.Extractor()

print('Enter url:')
url = input() 
x = ext.extract(requests.get(url).text, source_url=url)

print(x.title)
print(x.url)
print(x.description)

Результат из сценария №. 1:

enter image description here


Скрипт №. 2:

from bs4 import BeautifulSoup
import requests

print('Enter url:')
url = input()

source = requests.get(url).text
soup = BeautifulSoup(source, 'lxml')

title = soup.find("meta", property="og:title")["content"]
typeof = soup.find("meta", property="og:type")["content"]
image = soup.find("meta", property="og:image")["content"]
url = soup.find("meta", property="og:url")["content"]
summary = soup.find("meta", property="og:description")["content"]

print(title)
print(typeof)
print(image)
print(url)
print(summary)

enter image description here

1 Ответ

1 голос
/ 15 апреля 2020

Ошибки содержат тонны информации, но вам нужно потратить секунду, чтобы правильно их интерпретировать.

Сценарий 1: Запрос не может быть удовлетворен. Эх go, с запросом что-то не так. Попробуйте:

import extraction
import requests
ext = extraction.Extractor()

print('Enter url:')
url = input() 

r = requests.get(url)

if r.status_code != 200: # check if request is _not_ OK
    print(f"Error {r.status_code} when requesting {url}!")
    return

x = ext.extract(, source_url=url)

print(x.title)
print(x.url)
print(x.description)

Та же проблема со сценарием 2. Если, по-видимому, soup.find("meta", property="og:title") возвращает None, то теряется термин []. Так что go вернитесь и напечатайте soup, чтобы увидеть, все ли в порядке со сценарием.

...