Как извлечь только часть абзаца из ссылки, исключая другие ссылки с веб-страницы? - PullRequest
0 голосов
/ 26 января 2019

Я пытаюсь извлечь предложения из веб-страницы, но не могу исключить другие ссылки или дополнительные значки, представленные на этой веб-странице.

Я пытаюсь найти все вхождения 'p' на веб-странице (имеется в виду абзац), но я получаю и другие результаты, которые не требуются.

Мой код:

  import re
  from nltk import word_tokenize, sent_tokenize, ngrams
  from collections import Counter
  from urllib import request
  from bs4 import BeautifulSoup

  url = "https://www.usatoday.com/story/sports/nba/rockets/2019/01/25/james-harden-30-points-22-consecutive-games-rockets-edge-raptors/2684160002/"
  html = request.urlopen(url).read().decode('utf8')
  raw = BeautifulSoup(html,"lxml") 


 partags = raw.find_all('p') #to extract only paragraphs 
 print(partags) 

Я получаю следующий вывод (публикация в виде изображения, потому что копирование вставки не будет выглядеть так аккуратно)

[![enter image description here][1]][1]

https://i.stack.imgur.com/rGC1P.png

Но я бы хотел извлечь из ссылки только такие предложения, есть ли дополнительный фильтр, который я мог бы применить.

[! [Введите описание изображения здесь] [1]] [1]

https://i.stack.imgur.com/MlPUV.png'

Code after Valery's feedback.  

partags = raw.get_text()
print(partags)

Вывод, который я получаю (он содержит ссылки и другие в формате JSON)

This is just sample from the full output: 

James Harden extends 30-point streak, makes key defensive stop
{
    "@context": "http://schema.org",
    "@type": "NewsArticle",
    "headline": "James Harden extends 30-point streak, makes key defensive stop to help Rockets edge Raptors",
    "description": "James Harden scored 35 points for his 22nd consecutive game with at least 30, and forced Kawhi Leonard into a missed 3 at buzzer for 121-119 win.",
    "url": "https://www.usatoday.com/story/sports/nba/rockets/2019/01/25/james-harden-30-points-22-consecutive-games-rockets-edge-raptors/2684160002/?utm_source=google&utm_medium=amp&utm_campaign=speakable",
    "mainEntityOfPage": {
        "@type": "WebPage",
        "@id": "https://www.usatoday.com/story/sports/nba/rockets/2019/01/25/james-harden-30-points-22-consecutive-games-rockets-edge-raptors/2684160002/"
    },

1 Ответ

0 голосов
/ 26 января 2019

bs4 документы об этом BeautifulSoup / bs4 / doc / # get-text

import requests
from bs4 import BeautifulSoup as bs

response = requests.get("https://www.usatoday.com/story/sports/nba/rockets/2019/01/25/james-harden-30-points-22-consecutive-games-rockets-edge-raptors/2684160002/")
html = response.text
raw = bs(html, "html")

for partag in raw.find_all('p'):

    print(partag.get_text())

Здесь Ссылка на результаты

Таким образом, вызов get_text () для partags (тегов абзаца) дает правильный текст без шума.

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