我正在尝试从网站上抓取广告的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
缩短的网址图片:
完整的网址图片:
答案 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'
>>>