2017-06-01 6 views
0

私は、ニュースウェブサイトの典型的なアーカイブされたものを含むすべてのリンクを抽出するニュースウェブサイトをクロールしています。サイトhereには、さらに多くのウェブサイトの記事を読み込むボタンがあります(View More Stories)。今アーカイブされたリンクを含むウェブサイトからURLを抽出します

def find_urls(): 
start_url = "e.vnexpress.net/news/business" 
r = requests.get("http://" + start_url) 
data = r.text 
soup = BeautifulSoup(data, "html.parser") 
links = soup.findAll('a') 
url_list = [] 
for url in links: 
    all_link = url.get('href') 
    if all_link.startswith('http://e.vnexpress.net/news/business'): 
     url_list.append(all_link) 
return set(url_list) 

以下、このコードが正常にかなりの数のURLをロードしますが、ボタン

<a href="javascript:void(0)" id="vnexpress_folder_load_more" data-page="2" 
          data-cate="1003895"> 
          View more stories 
         </a> 

のスニペットは、誰かが私を助けることができる方法私はもっとここに読み込むんです。ありがとう。

+1

「投稿」リクエストからもっと多くのストーリーが来ています。したがって、まず次のページURLを指定してから、「投稿」リクエストを行います。これはあなたの次のページURL http://e.vnexpress.net/news/business?cate_id=1003895&page=2です。 2つのパラメータ 'cate_id'と' page'を渡す必要があります –

+0

@akashkarothiyaあなたは私に詳しい説明を教えてくれますか?よろしく! – Jeremiah

答えて

1

セレンのようなブラウザを使用して、ボタンが消えるか無効になるまでボタンをクリックすることができます。最後に、一度にbeautifulsoupを使用してページ全体を削り取ることができます。

from selenium import webdriver 
from selenium.webdriver.common.keys import Keys 

#initializing browser 
driver = webdriver.Firefox() 
driver.set_window_size(1120, 550) 

driver.get("http://e.vnexpress.net/news/news") 

# run this till button is present 
elem = driver.find_element_by_id('vnexpress_folder_load_more')) 
elem.click() 
+0

これは素晴らしい作品です。しかし、私はそれを数回走らせることができますか?私はそれが1つだけ働いたことを発見した。ドキュメントからセレンに関する記事を読んで、関連するものを見つけることができませんでした。 – Jeremiah

+0

@Jeremiahは実行方法を教えてください。 – mrid

+0

私が理解しているところでは、 'elem.click()'は次のページを読み込みます。私が達成したいのは、約100個のURLをクロールした後におそらく停止する条件を指定するまで、繰り返し実行し続けることです。 – Jeremiah

関連する問題