解决爬虫中为某些项为空的情况

在我们平常爬取某个网站时,假设此网站内容排列整齐,例如这个论文网站。

解决爬虫中为某些项为空的情况_第1张图片

我们可以看到,这个网站论文排列整齐。那么我们想要获得每个论文的标题,作者,摘要,pmid,doi这5项,如下图所示

解决爬虫中为某些项为空的情况_第2张图片

那么对于第6篇论文,在它的里面摘要不存在,因此我们写的对于取这5项信息的爬虫代码会出现问题,下面附上问题代码及错误截图:

问题代码:

from bs4 import BeautifulSoup
import requests
from lxml import html
start_url = 'https://www.ncbi.nlm.nih.gov/pubmed/?term=Journal+of+medicinal+chemistry'
url = 'https://www.ncbi.nlm.nih.gov/pubmed/{}'
def get_Detail():
    res = requests.get(start_url)
    soup = BeautifulSoup(res.text,'html.parser')
    for i in range(0,20):
        pmid = soup.select('.rprtid')[i].text.lstrip('PMID:').strip()    
        each_url = url.format(pmid)
        get_con(each_url)
def get_con(each_url):
    res = requests.get(each_url)
    tree = html.fromstring(res.content)
    print("标题:")
    title = tree.xpath('//h1/text()')
    print(title[0],end='')
    print("\n作者:")
    auther = tree.xpath('//div[@class="auths"]/a/text()')
    for auter in auther:    
        print(auter,end=",")
    print("\n摘要:")
    abstract = tree.xpath('//div[@class=""]/p/text()')
    print(abstract[0],end="")
    print("\nPMID:")
    pmid = tree.xpath('//dl[@class="rprtid"]/dd/text()')
    print(pmid[0],end="")
    print("\nDOI:")
    doi = tree.xpath('//dl[@class="rprtid"]/dd/a/text()')
    print(doi[0])

get_Detail()

错误截图:



我们可以看出错误原因是数组越界,正是因为在第6篇论文中不存在摘要信息,而代码中缺乏判断是否为空的代码,因此,我们在上述代码中添加判断摘要为空的代码

if abstract:                               #如果abstract存在,则打印摘要信息
        print(abstract[0],end="")

    else:                                    #如果不存在,则不打印任何信息

仅仅这一小段代码,就可以完整的爬取20篇论文的详细信息了,而不会出现数组越界的问题了。(此文章为作者原创,如有雷同,纯属巧合


你可能感兴趣的:(解决爬虫中为某些项为空的情况)