2017-06-01 81 views
0

我在抓取新闻网站以提取所有链接,包括新闻网站中典型的存档链接。该网站here有一个加载更多网站文章的按钮View More Stories。现在下面从网站中提取网址,包括存档链接

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

加载更多故事来自'发布'请求。因此,首先建立下一页网址,然后执行“发布”请求,这是您的下一页网址http://e.vnexpress.net/news/business?cate_id=1003895&page=2。你需要传递2个参数'cate_id'和'page' –

+0

@akashkarothiya你能给我更多的解释吗?问候! – Jeremiah

回答

1

您可以使用像硒这样的浏览器来点击按钮,直到按钮消失或禁用。最后,你可以一口气用美丽的手笔刮擦整个页面。

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

是的,这件作品很棒。但是我怎么能让它运行几次呢?我发现它只有一个。我试着从文档中找到有关硒的东西,但找不到相关的东西。 – Jeremiah

+0

@Jeremiah你能解释一下你想要它运行吗? – mrid

+0

从我所了解的'elem.click()'加载下一页。我希望它能够实现的是继续反复运行,直到我指定了一个条件以便在爬取大约100个url之后停止。 – Jeremiah