В Python, как исправить код, когда он выполняется нормально (код выхода 0), но без результатов (ничего не печатает)? - PullRequest
0 голосов
/ 17 мая 2019

Я пытаюсь почистить страницу Нью-Йорк Таймс. Мой код работает нормально, так как он показывает код завершения 0, но не дает результатов.

import time

import requests

from bs4 import BeautifulSoup

url = 'https://www.nytimes.com/search?endDate=20190331&query=cybersecurity&sort=newest&startDate=20180401={}'

pages = [0]

for page in pages:
    res = requests.get(url.format(page))
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select("#search-results li > a"):
        resp = requests.get(item.get("href"))
        sauce = BeautifulSoup(resp.text, "lxml")
        date = sauce.select(".css-1vkm6nb ehdk2mb0 h1")
        date = date.text
        print(date)

        time.sleep(3)

с этим кодом, я надеюсь получить дату публикации для каждой статьи.

1 Ответ

1 голос
/ 17 мая 2019

Хорошая попытка - ты довольно близко.Проблема заключается в селекторах:

  1. #search-results запрашивает идентификатор, который не существует.Элемент <ol data-testid="search-results">, поэтому нам понадобятся другие средства для захвата этого тега привязки.
  2. .css-1vkm6nb ehdk2mb0 h1 не имеет особого смысла.Он запрашивает элемент h1, который находится внутри элемента ehdk2mb0, который находится внутри элемента с классом .css-1vkm6nb.На самом деле на странице есть элемент <h1 class="css-1vkm6nb ehdk2mb0">.Выберите это с помощью h1.css-1vkm6nb.ehdk2mb0.

Сказав, что это не данные о времени, которые вы ищете - это название.Мы можем получить элемент времени (<time>) с помощью простого sauce.find("time").

Полный пример:

import requests
from bs4 import BeautifulSoup

base = "https://www.nytimes.com"
url = "https://www.nytimes.com/search?endDate=20190331&query=cybersecurity&sort=newest&startDate=20180401={}"

pages = [0]

for page in pages:
    res = requests.get(url.format(page))
    soup = BeautifulSoup(res.text,"lxml")

    for link in soup.select(".css-138we14 a"):
        resp = requests.get(base + link.get("href"))
        sauce = BeautifulSoup(resp.text, "lxml")
        title = sauce.select_one("h1.css-1j5ig2m.e1h9rw200")
        time = sauce.find("time")
        print(time.text, title.text.encode("utf-8"))

Выход:

March 30, 2019 b'Bezos\xe2\x80\x99 Security Consultant Accuses Saudis of Hacking the Amazon C.E.O.\xe2\x80\x99s Phone'
March 29, 2019 b'In Ukraine, Russia Tests a New Facebook Tactic in Election Tampering'
March 28, 2019 b'Huawei Shrugs Off U.S. Clampdown With a $100 Billion Year'
March 28, 2019 b'N.S.A. Contractor Arrested in Biggest Breach of U.S. Secrets Pleads Guilty'
March 28, 2019 b'Grindr Is Owned by a Chinese Firm, and the U.S. Is Trying to Force It to Sell'
March 28, 2019 b'DealBook Briefing: Saudi Arabia Wanted Cash. Aramco Just Obliged.'
March 28, 2019 b'Huawei Security \xe2\x80\x98Defects\xe2\x80\x99 Are Found by British Authorities'
March 25, 2019 b'As Special Counsel, Mueller Kept Such a Low Profile He Seemed Almost Invisible'
March 21, 2019 b'Quotation of the Day: In New Age of Digital Warfare, Spies for Any Nation\xe2\x80\x99s Budget'
March 21, 2019 b'Coast Guard\xe2\x80\x99s Top Officer Pledges \xe2\x80\x98Dedicated Campaign\xe2\x80\x99 to Improve Diversity'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...