Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从包含存档链接的网站提取URL_Python_Beautifulsoup_Web Crawler - Fatal编程技术网

Python 从包含存档链接的网站提取URL

Python 从包含存档链接的网站提取URL,python,beautifulsoup,web-crawler,Python,Beautifulsoup,Web Crawler,我正在抓取一个新闻网站,以提取所有链接,包括新闻网站典型的归档链接。该网站有一个按钮查看更多故事,可加载更多网站文章。下面是代码 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') ur

我正在抓取一个新闻网站,以提取所有链接,包括新闻网站典型的归档链接。该网站有一个按钮
查看更多故事
,可加载更多网站文章。下面是代码

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>


有人能帮帮我吗。谢谢。

您可以使用类似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()

加载更多来自
post
请求的故事。因此,首先构造下一页url,然后执行
post
request,这是您的下一页url。您需要传递2个参数
cate_id
page
@akashkarothiya您能给我更多解释吗?当做是的,很好,这很有效。但是我怎样才能让它运行几次呢?我发现它只对一个人有效。我试图从文档中阅读有关selenium的内容,但找不到相关内容。@Jeremiah您能解释一下您希望它如何运行吗?根据我的理解,
元素。单击()
加载下一页。我想让它实现的是继续重复运行,直到我指定一个条件,让它在爬行大约100个url后停止。