我正在使用以下代码。除了' affiliation'之外,一切都有效。部分。 它返回一个错误: AttributeError:' NoneType'对象没有属性' text' 如果没有.text,它将返回所有内容 - 类中的整个代码
import requests
import bs4
import re
headers = {'User-Agent':'Mozilla/5.0'}
url = 'http://pubs.acs.org/toc/jacsat/139/5'
html = requests.get(url, headers=headers)
soup = bs4.BeautifulSoup(html.text, 'lxml')
tags = soup.findAll('a', href=re.compile("full"))
for tag in tags:
new_url = tag.get('href', None)
newurl = 'http://pubs.acs.org' + new_url
newhtml = requests.get(newurl, headers=headers)
newsoup = bs4.BeautifulSoup(newhtml.text, 'lxml')
article_title = newsoup.find(class_="articleTitle").text
print(article_title)
affiliations = newsoup.find(class_="affiliations").text
print(affiliations)
authors = newsoup.find(id="authors").text
print(authors)
citation_year = newsoup.find(class_="citation_year").text
print(citation_year)
citation_volume = newsoup.find(class_="citation_volume").text
print(citation_volume)
citation = newsoup.find(id="citation").text
print(citation)
pubdate = newsoup.find(id="pubDate").text
print(pubdate)
答案 0 :(得分:1)
触发此异常是因为它未找到任何具有“affiliation”类的元素。 我已经检查过,并且在您的脚本擦除的第一个url中找不到源HTML(或任何其他属性)中具有此类值的任何元素。
我会发现错误,以避免脚本在找不到元素时断开并返回None或默认字符串。
这样的事情会起作用:
try:
affiliations = newsoup.find(class_="affiliations").text
print(affiliations)
except AttributeError:
affiliations = None