如何用beautifulsoup抓取动态内容?

问题描述 投票:0回答:2

这是我的脚本:

import warnings
warnings.filterwarnings("ignore")

import re
import json
import requests
from requests import get
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np

URLs = ['https://www.frayssinet-joaillier.fr/fr/p/montre-the-longines-legend-diver-l37744302-bdc2']


TypeVendor = []
NameVendor = []
Marques = []
Brands = []
Refs = []
Prices = []
#Carts = []
#Links = []
Links = []


#df = pd.read_csv('testlink4.csv')

n=1

for url in URLs:

    results = requests.get(url)
    soup = BeautifulSoup(results.text, "html.parser")

    TypeVendor.append('Distributeur')

    NameVendor.append('Frayssinet')

    Marques.append('Longines')

    Brands.append(soup.find('span', class_ = 'main-detail__name').text)

    Refs.append(soup.find('span', class_ = 'main-detail__ref').text)

    Prices.append(soup.find('span', class_ = 'prix').text)

    Links.append(url)

我明白为什么它不起作用,

text
不适合动态内容。但我不知道如何抓取此类内容。我知道如果你发现 json 数据存储在哪里,你可以对其进行调整并抓取数据。

但是我检查了谷歌开发者工具,在网络选项卡上,我没有找到任何东西。

python-3.x web-scraping beautifulsoup dynamic
2个回答
0
投票

根据您的要求设置

headers
,并以更结构化的方式存储您的信息。

示例

import requests
from bs4 import BeautifulSoup
import pandas as pd

headers = {'User-Agent': 'Mozilla/5.0'}
URLs = ['https://www.frayssinet-joaillier.fr/fr/p/montre-the-longines-legend-diver-l37744302-bdc2']

data = []
for url in URLs:

    results = requests.get(url,headers=headers)
    soup = BeautifulSoup(results.text, "html.parser")
    data.append({
        'name': soup.find('span', class_ = 'main-detail__name').get_text(strip=True),
        'brand': soup.find('span', class_ = 'main-detail__marque').get_text(strip=True),
        'ref':soup.find('span', class_ = 'main-detail__ref').get_text(strip=True),
        'price':soup.find('span', {'itemprop':'price'}).get('content'),
        'url':url
    })

pd.DataFrame(data)

输出

名字 品牌 参考 价格 网址
Montre 浪琴表 Legend Diver L3.774.4.30.2 浪琴表 参考:L3.774.4.30.2 2240 https://www.frayssinet-joaillier.fr/fr/p/montre-the-longines-legend-diver-l37744302-bdc2

0
投票

HedgeHog 的解决方案对我有用。我的问题是从 LinkedIn 学习课程讲座中抓取成绩单;代码更简单,但有效:

导入请求 从 bs4 导入 BeautifulSoup

sample_url = 'https://www.linkedin.com/learning/' + \
'python-for-data-science-essential-training-part-1/' + \
'navigablestring-objects'

results = requests.get(sample_url)
soup = BeautifulSoup(results.text, "html.parser")
transcript_div = soup.find("div", attrs={'class': 'transcripts__copy'})
s = list(transcript_div.stripped_strings)[1]
© www.soinside.com 2019 - 2024. All rights reserved.