веб-код для New York Times с использованием Beautifulsoup и селена не работает - PullRequest
0 голосов
/ 23 марта 2020

Я хочу собирать новостные статьи из «Нью-Йорк Таймс» с использованием Beautifulsoup и Selen. Я выполнил ту же задачу ранее и задал вопрос, связанный с этим. Как почистить газетные статьи с сайта, используя селен и BeautifulSoup в python? . Я получил ответ и успешно просмотрел статьи.
Однако теперь я снова делаю то же самое с тем же кодом, но код не работает.

Ниже приведен код, который я использовал (и работал ) поковырять статьи.

import csv
import time
import requests
from bs4 import BeautifulSoup
import json
import string
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

csv_file = open('NYTimes_remaining.csv', 'w')
csv_writer = csv.writer(csv_file)
csv_writer.writerow(['Date', 'Headline', 'Content'])

base = "https://www.nytimes.com"
browser = webdriver.Safari(executable_path = '/usr/bin/safaridriver')
wait = WebDriverWait(browser, 10)
browser.get('https://www.nytimes.com/search?endDate=20180703&query=cybersecurity&sort=newest&startDate=20180401')

while True:
    try:
        time.sleep(1)
        show_more = wait.until(EC.element_to_be_clickable((By.XPATH, '//button[@type="button"][contains(.,"Show More")]')))
        show_more.click()
    except Exception as e:
            print(e)
            break

soup = BeautifulSoup(browser.page_source,'lxml')
search_results = soup.find('ol', {'data-testid':'search-results'})

links = search_results.find_all('a')
for link in links:
    link_url = link['href']

    title = link.find('h4').text
    date = link.find_next('time').text
    print(f'{date}\n {title}\n')

    response = requests.get(base + link_url)
    soup_link = BeautifulSoup(response.text, 'html.parser')
    scripts = soup_link.find_all('script')
    for script in scripts:
        if 'window.__preloadedData = ' in script.text:
            jsonStr = script.text
            jsonStr = jsonStr.split('window.__preloadedData = ')[-1]
            jsonStr = jsonStr.rsplit(';',1)[0]

            jsonData = json.loads(jsonStr)

            article = []
            for k, v in jsonData['initialState'].items():
                w=1
                try:
                    if v['__typename'] == 'TextInline':
                        article.append(v['text'])
                        #print (v['text'])
                except:
                    continue
            article = [ each.strip() for each in article ]
            article = ''.join([('' if c in string.punctuation else ' ')+c for c in article]).strip()
    print(article + '\n')

    csv_writer.writerow([date, title, article])

print("Complete")

browser.quit()

csv_file.close() 

Мой вопрос, почему код не работает? В чем проблема? Как мне решить эту проблему?

Заранее спасибо.

...