Почему я не получаю ни вывод, ни ошибку при просмотре веб-страниц? - PullRequest
0 голосов
/ 22 ноября 2018

Я выполняю задание по утилизации веб-страниц в Google Colab с красивыми сообщениями и запросами.Здесь я только соскребаю заголовок новостей Google.Ниже приведен код:

import requests
from bs4 import BeautifulSoup

def beautiful_soup(url):
'''DEFINING THE FUNCTION HERE THAT SENDS A REQUEST AND PRETTIFIES THE TEXT 
INTO SOMETHING THAT IS EASY TO READ'''

request = requests.get(url)
soup = BeautifulSoup(request.text, "lxml")
print(soup.prettify())

beautiful_soup('https://news.google.com/?hl=en-IN&gl=IN&ceid=IN:en')

for headlines in soup.find_all('a', {'class': 'VDXfz'}):
   print(headlines.text)

Проблема в том, что когда я запускаю ячейку, она не показывает ни вывод (список заголовков), ни ошибку.Помогите, пожалуйста, мне это мешает в течение 2 дней.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Запустив следующий скрипт, вы должны получить требуемые результаты.Если бы вы использовали селектор, сценарий был бы намного чище.

Однако, используя .find_all():

import requests
from bs4 import BeautifulSoup

def get_headlines(url):
    request = requests.get(url)
    soup = BeautifulSoup(request.text,"lxml")
    headlines = [item.find_next("span").text for item in soup.find_all("h3")]
    return headlines

if __name__ == '__main__':
    link = 'https://news.google.com/?hl=en-IN&gl=IN&ceid=IN:en'
    for titles in get_headlines(link):
        print(titles)

Чтобы сделать то же самое, используя .select(), внесите это изменение в сценарий:

headlines = [item.text for item in soup.select("h3 > a > span")]
return headlines
0 голосов
/ 22 ноября 2018

Возможно, вам нужно отобразить текст из следующего элемента span.Это можно сделать следующим образом:

import requests
from bs4 import BeautifulSoup

def beautiful_soup(url):
    '''DEFINING THE FUNCTION HERE THAT SENDS A REQUEST AND PRETTIFIES THE TEXT 
       INTO SOMETHING THAT IS EASY TO READ'''

    request = requests.get(url)
    soup = BeautifulSoup(request.text, "lxml")
    #print(soup.prettify())
    return soup

soup = beautiful_soup('https://news.google.com/?hl=en-IN&gl=IN&ceid=IN:en')

for headlines in soup.find_all('a', {'class': 'VDXfz'}):
    print(headlines.find_next('span').text)

Это даст вам вывод, начиная что-то вроде:

I Take Back My Comment, Says Ram Madhav After Omar Abdullah’s Dare to Prove Pakistan Charge
Ram Madhav Backpedals On "Instruction From Pak" After Omar Abdullah Dare
National Conference backed PDP to save J&K from uncertainty: Omar Abdullah
On Ram Madhav ‘instruction from Pak’ barb, Omar Abdullah’s stinging reply
Make public reports of horse-trading in govt formation in J-K: Omar Abdullah to Guv

Вы можете записать заголовки в файл в формате CSV, используя следующиеподход:

import requests
from bs4 import BeautifulSoup
import csv

def beautiful_soup(url):
    '''DEFINING THE FUNCTION HERE THAT SENDS A REQUEST AND PRETTIFIES THE TEXT 
       INTO SOMETHING THAT IS EASY TO READ'''

    request = requests.get(url)
    soup = BeautifulSoup(request.text, "lxml")
    return soup

soup = beautiful_soup('https://news.google.com/?hl=en-IN&gl=IN&ceid=IN:en')

with open('output.csv', 'w', newline='', encoding='utf-8') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow(['Headline'])

    for headlines in soup.find_all('a', {'class': 'VDXfz'}):
        headline = headlines.find_next('span').text
        print(headline)
        csv_output.writerow([headline])

В настоящее время это просто производит один столбец с именем Headline

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