python - 如何在 Python BeautifulSoup 中抓取网站中的每个页面
问题描述
有没有办法抓取 URL 中的每个页面?
比如https://gogo.mn/找到每篇文章页面的URL?
以下是我到目前为止所拥有的。问题是新闻文章的模式很奇怪,例如https://gogo.mn/r/qqm4m
所以像下面这样的代码永远找不到文章。
base_url = 'https://gogo.mn/'
for i in range(number_pages):
url = base_url+str(i)
req = requests.get(url)
soup = BeautifulSoup(req.content)
如何抓取此类网站?
解决方案
最简单的方法是首先从网站获取页面。可以这样实现:
url = 'https://gogo.mn/'
response = requests.get(url)
然后您的页面包含在 response 变量中,您可以通过查看 response.text 来检查该变量。
现在使用 BeautifulSoup 查找页面中包含的所有链接:
a_links = html.find_all('a')
这将返回一个 bs4.element.ResultSet 类型,可以使用 for 循环对其进行迭代。查看您的特定站点,我发现他们的许多链接中都没有包含 baseURL,因此必须对 URLS 进行一些规范化。
for link in a_links:
if ('https' in link['href']) or ('http' in link['href']):
print (link['href'])
else:
xLink = link['href'][1:]
print (f'{url}{xLink}')
完成后,您将拥有给定页面的所有链接。然后,您需要消除重复项,并为每个页面运行新页面上的链接。这将涉及递归地遍历您找到的所有链接。
问候
推荐阅读
- polygon - 计算保护区多边形与预测的最大栖息地适宜性的重叠
- tensorflow - Keras:如何加载 CNN 预训练的权重(冻结网络)以在 LSTM 中使用它们?
- linear-programming - 我的代码有什么错误?我还没有设置数据
- linux - 如何将多个文件夹分别压缩到另一个文件夹和 tar.gz
- android - Recyclerview:每个项目的自定义样式在滚动时不更新
- python - 如何使此代码正确执行 if 语句
- kotlin - Gradle 6+:在 kotlin 之前编译 groovy
- bash - 删除有一个文件但没有另一个文件的目录
- python - 如何在 Python 中解决此错误。一个文件夹中有多个文件,我需要根据文件名创建文件夹
- css - Css,Safari:悬停不会改变按钮颜色