Python 我的组上没有文本

Python 我的组上没有文本,python,web-scraping,beautifulsoup,Python,Web Scraping,Beautifulsoup,我想刮电子商务网站,我已经解析了html,但为什么我的解析不包含div类上的任何文本 这些产品是使用json资源中的javascript加载的,这就是为什么在请求的响应中找不到任何内容 您需要发出此请求才能获得产品: import requests headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0', 'Ac

我想刮电子商务网站,我已经解析了html,但为什么我的解析不包含div类上的任何文本


这些产品是使用json资源中的javascript加载的,这就是为什么在请求的响应中找不到任何内容

您需要发出此请求才能获得产品:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Language': 'en-US,en;q=0.5',
    'Content-Type': 'application/json; charset=utf-8;',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection': 'keep-alive',
    'Referer': 'https://www.bhinneka.com/jual?cari=iphone&catId=3457215&page=1',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache', }

params = (
    ('size', '40'),
    ('brand', ''),
    ('q', 'iphone'),
    ('catid', '3457215'),
    ('catselect', '3457215'),
    ('page', '1'),
    ('_', '1590651955014'), )

response = requests.get('https://www.bhinneka.com/search/data', headers=headers, params=params)
products = response.json()

您可以调整参数以获取所有页面。

产品是使用json资源中的javascript加载的,这就是您在请求响应中找不到任何内容的原因

您需要发出此请求才能获得产品:

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:76.0) Gecko/20100101 Firefox/76.0',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'Accept-Language': 'en-US,en;q=0.5',
    'Content-Type': 'application/json; charset=utf-8;',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection': 'keep-alive',
    'Referer': 'https://www.bhinneka.com/jual?cari=iphone&catId=3457215&page=1',
    'Pragma': 'no-cache',
    'Cache-Control': 'no-cache', }

params = (
    ('size', '40'),
    ('brand', ''),
    ('q', 'iphone'),
    ('catid', '3457215'),
    ('catselect', '3457215'),
    ('page', '1'),
    ('_', '1590651955014'), )

response = requests.get('https://www.bhinneka.com/search/data', headers=headers, params=params)
products = response.json()

您可以调整参数以获得所有页面。

您在页面上看到的数据是通过JavaScript加载的。您可以使用
请求
库来模拟此调用

例如:

import requests
from bs4 import BeautifulSoup

url = 'https://www.bhinneka.com/jual?cari=iphone&catId=3457215'
ajax_url = 'https://www.bhinneka.com/search/data?size=40&brand=&q=iphone&catid={cat_id}&catselect={cat_id}'

cat_id = url.rsplit('=', maxsplit=1)[-1]
data = requests.get(ajax_url.format(cat_id=cat_id), headers={'X-Requested-With':'XMLHttpRequest'}).json()
soup = BeautifulSoup(data['data'], 'html.parser')

for prod in soup.select('.col-sm-3.bt-product-catalog-item__price'):
    name = prod.select_one('.bt-product-catalog-item__title').get_text(strip=True)
    price = prod.select_one('p.bt-product-catalog-item__price-normal').get_text(strip=True)

    # convert to int
    price = int( price.rsplit('.', maxsplit=1)[0].split()[-1].replace('.', '') )

    print('{:<50}{}'.format(name, price))

您在页面上看到的数据是通过JavaScript加载的。您可以使用
请求
库来模拟此调用

例如:

import requests
from bs4 import BeautifulSoup

url = 'https://www.bhinneka.com/jual?cari=iphone&catId=3457215'
ajax_url = 'https://www.bhinneka.com/search/data?size=40&brand=&q=iphone&catid={cat_id}&catselect={cat_id}'

cat_id = url.rsplit('=', maxsplit=1)[-1]
data = requests.get(ajax_url.format(cat_id=cat_id), headers={'X-Requested-With':'XMLHttpRequest'}).json()
soup = BeautifulSoup(data['data'], 'html.parser')

for prod in soup.select('.col-sm-3.bt-product-catalog-item__price'):
    name = prod.select_one('.bt-product-catalog-item__title').get_text(strip=True)
    price = prod.select_one('p.bt-product-catalog-item__price-normal').get_text(strip=True)

    # convert to int
    price = int( price.rsplit('.', maxsplit=1)[0].split()[-1].replace('.', '') )

    print('{:<50}{}'.format(name, price))

请显示,您的预期输出是什么?回答您的问题对我们有帮助吗?请说明,您的预期产量是多少?回答你的问题会对我们有帮助吗?谢谢兄弟,但我这里有一些问题,我只想取整数(价格)如何使它只是一个数字(在价格变量中)?谢谢兄弟,但我这里有一些问题,我只想取整数(价格)如何使它只是一个数字(在价格变量中)?