使用BeautifulSoup(Jupyter Notebook)进行网页爬取

下午好,

我对Webscraping非常陌生。我正在尝试从开源门户网站抓取数据集。只是为了弄清楚如何抓取网站。 我正在尝试从data.toerismevlaanderen.be换一个数据集 这是我想要的数据集:https://data.toerismevlaanderen.be/tourist/reca/beer_bars

我总是以http错误结尾:HTTP错误404:找不到

这是我的代码:

import requests
import urllib.request
import time
from bs4 import BeautifulSoup

url = 'https://data.toerismevlaanderen.be/'
response = requests.get(url)

soup = BeautifulSoup(response.text,'html.parser')
soup.findAll('a')
one_a_tag = soup.findAll('a')[35]
link = one_a_tag['href']

download_url = 'https://data.toerismevlaanderen.be/'+ link
urllib.request.urlretrieve(download_url,'./'+link[link.find('/tourist/reca/beer_bars_')+1:]) 

time.sleep

我在做什么错了?

tjdeng1204 回答:使用BeautifulSoup(Jupyter Notebook)进行网页爬取

问题如下:

link = one_a_tag['href']
print(link)

这将返回一个链接:https://data.toerismevlaanderen.be/

然后您要通过以下操作将此link添加到download_url

download_url = 'https://data.toerismevlaanderen.be/'+ link

因此,如果您print(download_url),您将得到:

https://data.toerismevlaanderen.be/https://data.toerismevlaanderen.be/

这不是有效的网址。

基于评论的更新

问题是您抓取的文本中的任何地方都没有tourist/activities/breweries。 如果您写:

for link in soup.findAll('a'):
  print(link.get('href'))

您会看到所有的href标签。没有一个包含tourist/activities/breweries

但是 如果只需要链接data.toerismevlaanderen.be/tourist/activities/breweries,则可以执行以下操作:

download_url = link + "tourist/activities/breweries"
,

这里有an API,所以我会用它

例如

import requests

r = requests.get('https://opendata.visitflanders.org/tourist/reca/beer_bars.json?page=1&page_size=500&limit=1').json()
,

您会获得许多绝对链接。将其添加到原始网址以进行新请求将无法正常工作。只需请求获取的“链接”即可代替

本文链接:https://www.f2er.com/3095811.html

大家都在问