将子列表中的行追加到新列表

时间:2019-10-18 15:57:24

标签: python-3.x web-scraping beautifulsoup list-comprehension

我正在爬网,尝试将第一条链接追加到链接列表之外(使用列表理解),但遇到了麻烦。我浏览了很多帖子,这些帖子使我很接近,但不太完全。我收到一个错误(如下所示)或所有链接(不仅是每个URL的第一个链接)。我尝试过显示here的解决方案,但是在Navigable String周围出现了另一个错误。请参阅下面的先前代码,错误和理想输出。谢谢您的帮助!

代码

dfkf['URL'][0:5].values = 
      ['https://www.sec.gov/Archives/edgar/data/867028/0001493152-19-010877-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1438901/0001161697-19-000350-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1750/0001047469-19-004266-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1138723/0001564590-19-032909-index.htm',
       'https://www.sec.gov/Archives/edgar/data/1650101/0001493152-19-009992-index.htm']


x = []
for URL in dfkf['URL'][0:5].values:
    r = requests.get(str(URL))
    soup = BeautifulSoup(r.text, 'html.parser')
    x.append([line['href'] for line in list(soup.find_all(text = re.compile('xml'), href=True))][0])

错误 IndexError:列表索引超出范围

理想输出(返回链接列表中的第一个链接)

  x= ['/Archives/edgar/data/867028/000149315219010877/etfm-20181231.xml',
  [],
  '/Archives/edgar/data/1750/000104746919004266/air-20190531.xml',
  '/Archives/edgar/data/1138723/000156459019032909/aray-20190630.xml',
  '/Archives/edgar/data/1650101/000149315219009992/atxg-20190331.xml']

1 个答案:

答案 0 :(得分:1)

不需要列表理解:

for URL in dfkf['URL'][0:5].values:
    r = requests.get(str(URL))
    soup = BeautifulSoup(r.text, 'html.parser')
    links = soup.find_all(text=re.compile('xml'), href=True)
    if links:
        x.append(links[0]['href'])
    else:
        x.append(list())

编辑:做x.append(None)可能比x.append(list())更好,除非您的结果中确实需要一个空白列表。