第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python Web Scraping - 只查找 n 個項目

Python Web Scraping - 只查找 n 個項目

慕妹3242003 2023-07-27 16:15:22
我正在運行一個用 Beautiful Soup 制作的抓取腳本。我從 Google 新聞中抓取結果,并且只想獲取作為元組添加到變量中的前 n 個結果。該元組由新聞標題和新聞鏈接組成。在完整的腳本中,我有一個關鍵字列表,例如 ['crisis','finance'] 等,您可以忽略該部分。這就是代碼。import bs4,requestsarticles_list = []base_url = 'https://news.google.com/search?q=TEST%20when%3A3d&hl=en-US&gl=US&ceid=US%3Aen' request = requests.get(base_url) webcontent = bs4.BeautifulSoup(request.content,'lxml')         for i in webcontent.findAll('div',{'jslog':'93789'}):              for link in i.findAll('a', attrs={'href': re.compile("/articles/")},limit=1):                 if any(keyword in i.select_one('h3').getText() for keyword in keyword_list):                     articles_list.append((i.select_one('h3').getText(),"https://news.google.com"+str(link.get('href')))) 這樣寫就是將滿足 if 語句的所有新聞和鏈接添加為元組,這可能會導致一個很長的列表。我只想獲取前 n 條新聞,假設有 5 條,然后我希望腳本停止。我試過:for _ in range(5):但我不明白在哪里添加它,因為代碼要么沒有運行,要么附加相同的新聞 5 次。我也嘗試過:while len(articles_list)<5:但由于該語句是 for 循環(huán)的一部分,并且變量articles_list 是全局的,因此它也停止為下一個抓取對象追加內(nèi)容。最后我嘗試了:for tuples in (articles_list[0:5]): #Iterate in the tuple,        for element in tuples: #Print title, link and a divisor            print(element)        print('-'*80)如果沒有其他選擇,我可以做最后一個,但我會避免,因為變量articles_list無論如何都會包含比我需要的更多的元素。你能幫我理解我所缺少的嗎?
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

您的代碼中有一個雙循環(huán)。要退出這兩個循環(huán),您需要使用break兩次,每個循環(huán)一次。您可以在兩個循環(huán)中的相同條件下中斷。


試試這個代碼:


import re

import bs4,requests


keyword_list = ['health','Coronavirus','travel']

articles_list = []


base_url = 'https://news.google.com/search?q=TEST%20when%3A3d&hl=en-US&gl=US&ceid=US%3Aen' 

request = requests.get(base_url) 

webcontent = bs4.BeautifulSoup(request.content,'lxml') 


maxcnt = 5  # max number of articles

     

for ictr,i in enumerate(webcontent.findAll('div',{'jslog':'93789'})):

   if len(articles_list) == maxcnt: break   # exit outer loop

   for link in i.findAll('a', attrs={'href': re.compile("/articles/")},limit=1): 

       if any(keyword in i.select_one('h3').getText() for keyword in keyword_list): 

           articles_list.append((i.select_one('h3').getText(),"https://news.google.com"+str(link.get('href')))) 

           if len(articles_list) == maxcnt: break  # exit inner loop


print(str(len(articles_list)), 'articles')

print('\n'.join(['> '+a[0] for a in articles_list]))  # article titles

輸出


5 articles

> Why Coronavirus Tests Come With Surprise Bills

> It’s Not Easy to Get a Coronavirus Test for a Child

> Britain’s health secretary says the asymptomatic don’t need tests. Critics say that sends a mixed message.

> Coronavirus testing shifts focus from precision to rapidity

> Coronavirus testing at Boston lab suspended after nearly 400 false positives


查看完整回答
反對 回復 2023-07-27
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號