У меня есть скрипт, который перебирает несколько страниц.Это работает по большей части, но я получаю сообщение об ошибке TypeError: 'NoneType' object is not subscriptable
для ссылки, хотя элемент существует.Я добавил оператор if, else, который позволяет запускать сценарий, но оставляет пустое поле для ссылки на одну или две записи, которые должны быть там.Вот мой рабочий скрипт с оператором if, else.Любые предложения о том, как заставить это работать без заявления if, else?
from urllib.request import urlopen
from bs4 import BeautifulSoup as soup
import json
base_url = "https://www.doabooks.org/"
books = []
n = 5
for i in range(1, n+1):
if (i == 1):
# handle first page
response = urlopen(base_url)
response = urlopen(base_url + "doab?func=browse&page=" + str(i) + "&queryField=A&uiLanguage=en")
page_html = response.read()
response.close()
#html parsing
page_soup = soup(page_html, "html.parser")
#grabs info for each textbook
containers = page_soup.findAll("div",{"class":"data"})
for container in containers:
item = {}
item['type'] = "Open Access Book"
item['title'] = container.span.text.strip()
item['author'] = container.a.text
if container.find('a', {'itemprop' : 'url'}):
item['link'] = "https://www.doabooks.org" + container.find('a', {'itemprop' : 'url'})['href']
else:
item['link'] = ''
item['source'] = "Directory of Open Access Books"
if container.find("a",{"itemprop":"about"}):
item['subject'] = container.find("a",{"itemprop":"about"}).text
else:
item['subject'] = ''
item['base_url'] = "https://www.doabooks.org/"
books.append(item) # add the item to the list
with open("./json/doab-test.json", "w") as writeJSON:
json.dump(books, writeJSON, ensure_ascii=False)