Почему код не может очистить какой-либо контент в классе HTML? - PullRequest
0 голосов
/ 23 мая 2018

В течение inspect я вижу, что контент находится в классе article-wrap, как показано на скриншоте:

enter image description here

Но когдаЯ пытаюсь очистить содержимое текста в нем, я ничего не получаю:

enter image description here

Почему это так?Я неправильно указываю класс?Если да, какой класс мне нужно указать?Какой самый простой способ узнать, какой класс (или тег, или div, и т. Д.) Мне следует указать?

Это код:

import requests

links = open("article links.txt", "r")

for a in links:
    page = requests.get(a)
    soup = BeautifulSoup(page.text, 'lxml')

    html = soup.find(class_="article-wrap")

    print(html)

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

На самом деле оказалось, что это две вещи:

Во-первых, в article links.txt каждая ссылка была в новой строке (то есть заканчивалась \n).Итак, мне нужно было сделать a=a.rstrip() до page = requests.get(a), чтобы получить правильный суп.Без полосы, если я распечатаю суп, это выглядит так:

>>> page = requests.get('http://www3.asiainsurancereview.com//Mock-News-Article/id/42945/Type/eDaily/New-Zealand-Govt-starts-public-consultation-phase-of-review-of-insurance-law\n')
>>> page
<Response [400]>
>>> page.text
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid URL</h2>
<hr><p>HTTP Error 400. The request URL is invalid.</p>
</BODY></HTML>

Как видно, без удаления \n в конце каждой ссылки, он не может извлечь информациюна странице (в частности, нет тега artcle-wrap в супе, который он извлекает).

Во-вторых, я добавил оба html-класса, article-wrap и mag-article-wrap, чтобы приспособить для двух различных видов статей.:

html = soup.find(class_='article-wrap')
if html==None:
    html = soup.find(class_='mag-article-wrap')

text = get_text(html.text)

Теперь все работает нормально.

0 голосов
/ 23 мая 2018

Намного проще использовать метод BeautifulSoup .select(), похожий на селекторы css, например ниже:

import requests
from bs4 import BeautifulSoup
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.86 Safari/537.36'}

links = open("article links.txt", "r")

for a in links:
    r = requests.get(a, headers=headers, timeout=10)

    soup = BeautifulSoup(r.text, 'html.parser')

    results = soup.select(".article-wrap"):

    print(results)

Я тестировал на своем компьютере.Прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...