首页 > 解决方案 > 如何使用 BeautifulSoup 抓取网站中的每个页面

问题描述

有没有办法抓取 URL 中的每个页面?

比如https://gogo.mn/找到每篇文章页面的URL?

以下是我到目前为止所拥有的

import urllib
import urlparse
import re
from bs4 import BeautifulSoup

url = "https://gogo.mn/"
urls = []

soup = BeautifulSoup(urllib.urlopen(url).read())
for tag in soup.findAll('a',href=True):
        tag['href'] = urlparse.urljoin(url,tag['href'])
        if url in tag['href'] and tag['href'] not in visited:
            urls.append(tag['href'])

由于某种原因,此代码不会爬过所有页面。我该如何做到这一点?

标签: pythonpython-3.xbeautifulsoup

解决方案


一种方法是使用处理分页(单击页面按钮并抓取)的 selenium Web 驱动程序。

另一种方法是使用您正在寻找的 BeautifulSoup。在这里,您需要了解页面链接的格式,即如果主页格式为 as google.com/,page-1 格式为 as google.com/-1,page-2 格式为 asgoogle.com/-2等等,那么您创建一个基本 url 是google.com/-。然后使用循环,将页码添加到基本 url,从连接的 url 请求数据,直到最后一页,您将从每个页面获取。例如参考下面的代码

base_url = 'google.com/-'
for i in range(number_pages):
    url = base_url+str(i)
    req = requests.get(url)
    soup = BeautifulSoup(req.content)

请注意,以上只是一个示例。总体主题是了解链接模式并相应地创建与每个页面对应的链接,循环并获取数据。


推荐阅读