Я не получаю результат, используя python BeautifulSoup - PullRequest
1 голос
/ 18 марта 2020

Я написал код для очистки данных с веб-сайта, но он выполняет только except часть. На самом деле я хочу, чтобы очистить приложение и часть нет. Но главная проблема в том, что когда я запускаю эту программу, она отображает только пустое приложение и пустую часть №. Не могли бы вы помочь мне решить эту проблему, спасибо!
вот мой код:

import requests
from bs4 import BeautifulSoup
import csv

def get_page(url):
    response = requests.get(url)
    if not response.ok:
        print('server responded:', response.status_code)
    else:
        soup = BeautifulSoup(response.text, 'html.parser') # 1. html , 2. parser
    return soup
def get_detail_page(soup):
     try:
        application = soup.find('td',class_="application",id=False).text
     except:
        application = 'Empty Title'
     print(application)
     try:
        part_no = soup.find('td',class_="application",id=False)[0].text
     except:
        part_no = 'Empty Title'
     print(part_no) 

def main():
    url = "https://www.automotivebulbfinder.com/philips/"
    #get_page(url)
    get_detail_page(get_page(url))

if __name__ == '__main__':
    main()

1 Ответ

1 голос
/ 18 марта 2020

Судя по всему, вам даже не нужно использовать соскоб (beautifulsoup), поскольку он просто использует JSON API от конечной точки https://www.automotivebulbfinder.com/philips/functions/ajax.php. В зависимости от параметров URL, которые вы передаете этому URL, он возвращает список лет, модели и подмодели, которые различаются key параметром

Например:

et c ...

Приведенный ниже код получает каждый из этих списков с соответствующим годом, моделью и подмоделью на основе ввода пользователя:

import requests
import json

url = "https://www.automotivebulbfinder.com/philips/functions/ajax.php"

def get_items(itemName, params):
    r = requests.get(url, params = params)

    data = json.loads(r.text)

    if (data.get("data")): return (None, data["data"])

    items = json.loads(r.text)["items"].keys()
    for val in items: print(val)

    return (input("Enter a " + itemName + " : "), None)

year, data = get_items("year", { "key": "yearSelect"})
make, data = get_items("make", { "key": "makeSelect", "year": year})
model, data = get_items("model", { "key": "modelSelect", "year": year, "make": make})

if data: 
    print(data)
    exit(0)

qualifier, data = get_items("submodel", { "key": "submodelSelect", "year": year, "make": make, "model": model})

r = requests.get(url, params = {
    "key": "selectVehicle",
    "year": year,
    "make": make,
    "model": model,
    "qualifier": qualifier
})

print(json.loads(r.text)["data"])

Пример ввода:

[list of year]
Enter a year : 2019
[list of make]
Enter a make : Jeep
Cherokee
Enter a model : Cherokee
(w/halogen capsule headlamps)
(w/HID headlamps)
Enter a submodel : (w/HID headlamps)
{ all your data here}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...