【问题标题】:Extract URL from a website including archived links从包含存档链接的网站中提取 URL
【发布时间】:2017-06-01 10:20:33
【问题描述】:

我正在抓取一个新闻网站以提取所有链接,包括新闻网站典型的存档链接。网站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,但是我如何在这里加载更多的是按钮的sn-p

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

谁能帮帮我。谢谢。

【问题讨论】:

  • 加载更多来自post 请求的故事。因此,首先构建下一页 url,然后执行 post 请求,这是您的下一页 url e.vnexpress.net/news/business?cate_id=1003895&page=2 。你需要传递2个参数cate_idpage
  • @akashkarothiya 你能给我更多解释吗?问候!

标签: python beautifulsoup web-crawler


【解决方案1】:

您可以使用 selenium 之类的浏览器单击按钮,直到按钮消失或禁用。最后,您可以一次使用 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()

【讨论】:

  • 是的,这很好用。但是我怎样才能让它运行几次呢?我发现它只对那些有效。我尝试从文档中阅读有关硒的信息,但找不到相关的内容..
  • @Jeremiah 你能解释一下你希望它如何运行吗?
  • 据我了解,elem.click() 会加载下一页。我希望它实现的是继续重复运行,直到我指定它可能在爬取大约 100 个 url 后停止的条件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-09
  • 2016-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 2022-11-22
  • 2012-04-08
相关资源
最近更新 更多