python - 如何使用 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'])
由于某种原因,此代码不会爬过所有页面。我该如何做到这一点?
解决方案
一种方法是使用处理分页(单击页面按钮并抓取)的 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)
请注意,以上只是一个示例。总体主题是了解链接模式并相应地创建与每个页面对应的链接,循环并获取数据。
推荐阅读
- java - 如何为安卓应用创建在线数据库?
- mysql - 使用附加信息连接重复行(MySQL)
- reactjs - Webpack 将所有资产添加到根目录
- gnuplot - 如何使用矢量从风向角度绘制箭头
- docker-compose - Docker Swarm 错误 - 类型的挂载配置无效
- c# - EF 映射问题
- android - Android Linkify.addLinks() 适用于一个 textview 而不是另一个
- swift - ForEach 在符合 Identifiable 协议后无法在 SwiftUI 中工作
- javascript - 在 Javascript 中捕获用户输入不起作用
- python - How to stop printing a space in python2 print with a comma