Python-bs4-网站抓取-无法从网站获取完整网址

时间:2020-02-23 20:09:58

标签: python beautifulsoup

我正在尝试从网站上抓取广告的URL链接。 我在jupyter笔记本中有以下代码

from bs4 import BeautifulSoup
import requests
link = "https://www.marktplaats.nl/l/auto-s/bmw/p/1/"
data = requests.get(link)
soup = BeautifulSoup(data.content,"html.parser")
​
car1 = soup.findAll('li',{'class':'mp-Listing mp-Listing--list-item'})[0]
​
car1.a['href']

运行此代码时,我得到以下网址:

'/a/auto-s/bmw/a1322384400-bmw-x5-s-drive-executive-automaat-leder-navigatie-nr-038.html'

我认为这是一个相对URL,而不是完整URL。 当我检查页面时,确实看到了该URL,但是当我将鼠标放在页面上时,便可以看到整个URL。 我想抓取整个URL,有人可以帮我吗?

我添加了两个图像,一个显示缩短的URL,另一个显示完整的URL

缩短的网址图片:

完整的网址图片:

2 个答案:

答案 0 :(得分:0)

在我的回答中添加评论,以便可以将问题标记为已回答:)。那不是相对URL,而是绝对URL(因为它是从根文件夹开始,以正斜杠开头)。要获取完整的URL,只需在域名前面附加“ https://www.martkplaats.nl” + car1.a ['href']

答案 1 :(得分:0)

如果您使用的是Python 3,则可以使用urllib.parse.urljoin()加入 link中的基本URL和来自car1.a['href']的路径。

car1.a['href']相对路径,因为绝对URI 以协议/方案或双斜杠//开头。

如果 url 是绝对URL(即以//scheme://开头),则...

/中的起始单个/a/auto-s/...表示链接是 相对于主机的根 ,而不是来自当前路径您看到它的页面。 (当前页面的路径为/l/auto-s/bmw/p/1/。)

将tha放在一起:

>>> import urllib
>>>
>>> car_url = urllib.parse.urljoin(link, car1.a['href'])
>>> car_url
'https://www.marktplaats.nl/a/auto-s/bmw/a1322384400-bmw-x5-s-drive-executive-automaat-leder-navigatie-nr-038.html'
>>>
>>> car_page = requests.get(car_url).content
>>> car_soup = BeautifulSoup(car_page, 'html.parser')
>>> car_soup.title.text
'≥ BMW X5 S-Drive Executive Automaat Leder Navigatie - Nr 038 - BMW - Marktplaats.nl'
>>>