BS4 Web scraper: повторный список пропускает первое значение после добавления (только когда список отправляется по электронной почте, а не печатается) - PullRequest
0 голосов
/ 02 ноября 2018

Я уверен, что об этом спрашивали, однако я до сих пор не нашел решения, соответствующего моему конкретному случаю. Поскольку это мой первый проект на Python, у меня возникли проблемы с исправлением этой проблемы, так как он присутствует не всегда.

Проблема, с которой я сталкиваюсь, заключается в том, что, хотя мой итеративный список печатает статьи, которые я правильно просмотрел, когда я присоединяю список к другому списку, чтобы отправить его по электронной почте, иногда он пропускает первую строку в списке. Даже если я добавлю случайное значение во второй список, чтобы «подделать» значение, которое нужно пропустить, оно все равно пропустит первую статью, которую я хотел бы отправить по электронной почте, а также «поддельное» значение. Где я ошибаюсь?

import smtplib
import requests
import os
from bs4 import BeautifulSoup

data = requests.get('https://www.nytimes.com/section/technology')
soup = BeautifulSoup(data.text, 'html.parser')
body = soup.find("body")
arr1 = []

for h in body.findAll("h2", {"class" : "headline"} ):
 arr1.append(h.text.strip())

print( "The articles below were curated from The New York Times Technology 
section: ")
print(" ")

list1 = []

for item in arr1[:10]:
    print(item)
    list1.append("-" + item +'\n')

print_it = input("Would you like to send an email? Yes or no. ")
if print_it.lower() == 'yes':
#encodes to unicode and prevents it from causing problems       
    trial = u''.join(list1).encode('utf-8').strip()     
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login("senderemail@email.com", "PASSWORD")
    msg = (trial)
    server.sendmail("senderemail@email.com", "recipientemail@email.com", msg)
    server.quit()  
    os.system('cls')
    print("Email has been sent.")

else:
    os.system('cls')
    print("No email has been sent!")

Спасибо за помощь!

...