Парсинг с помощью BS4, поиск названия компании и идентификатора

В настоящее время я просматриваю веб-страницы с помощью bs4, python. Я хотел бы получить некоторые результаты, чтобы найти 3 переменные: название компании, идентификатор продукта и идентификатор компании.

Это то, что у меня есть

Мой код

import requests
from bs4 import BeautifulSoup


page = requests.get('https://www.alibaba.com/product-detail/Crazy-Hot-Selling-Multifunctional-Battery-Powered_60769168637.html')

# Create a BeautifulSoup object
soup = BeautifulSoup(page.text, 'html.parser')

i = 0
for link in soup.find_all('a'):
    i = i + 1
    print("v5 is",link.get('title'), i)

v6 = soup.select_one('meta[name="aplus-exdata"][content]')['content']
print("v6 is",v6)    

Мой вывод:

**...**
v5 is None 54
v5 is None 55
v5 is Click to send an inquiry 56
v5 is None 57
v5 is None 58
v5 is Shenzhen ONULISS Technology Co., Limited 59
v5 is None 60
v5 is Trade Assurance 61
**...**
v6 is {"productId":"60769168637","companyId":"240628921"}

Вывод, который мне нужен

v5 is Shenzhen ONULISS Technology Co., Limited
Product Id: 60769168637
Company ID: 240628921

Дополнительные примечания

- Я использую v5,v6,vn variables просто как ссылку, чтобы узнать, где я нахожусь в коде, что действительно важно, так это выходная компания и идентификаторы.

-Переменная i — это просто ссылка, чтобы понять, сколько раз вывод повторяется в html. Я не хочу постоянно использовать i variable для поиска названия компании, потому что, возможно, оно находится не на позиции 59 на всех разных веб-страницах.

Спасибо за ответы!


person The Dan    schedule 18.12.2019    source источник


Ответы (1)


В вашем коде есть некоторые ошибки, вам нужно разобрать json перед печатью и т. д. Попробуйте это:

import requests
from bs4 import BeautifulSoup
import json

page = requests.get('https://www.alibaba.com/product-detail/Crazy-Hot-Selling-Multifunctional-Battery-Powered_60769168637.html')

# Create a BeautifulSoup object
soup = BeautifulSoup(page.text, 'html.parser')

company_name = soup.select_one('[data-aui="company-name"][title]')['title']

raw_content = soup.select_one('meta[name="aplus-exdata"][content]')['content']

#parse raw json
product_and_company_meta = json.loads(raw_content)

print("v5 is", company_name)
print("Product Id: ", product_and_company_meta['productId'])
print("Company Id: ", product_and_company_meta['companyId'])
person Gaurav Dhiman    schedule 18.12.2019
comment
У меня вопрос, что на самом деле здесь делает JSON? Очистка данных? - person The Dan; 18.12.2019
comment
И еще один вопрос: знаете ли вы, где я могу найти дополнительную информацию о том, как использовать JSON для веб-скраппинга? - person The Dan; 18.12.2019