У меня проблемы с анализом и извлечением значения идентификатора из HTML с помощью Python и BeautifulSoup - PullRequest
0 голосов
/ 13 октября 2019

Я хочу извлечь все URL-адреса продуктов с этой страницы (https://www.example.com/products), а затем перейти к каждому URL-адресу, проанализировать его, получить значения идентификаторов и распечатать их. Я написал некоторый код, но он не сработал, поэтомудалеко. [Вот список продуктов, из которых я извлекаю URL-адреса] [1]

[Вот список размеров, из которых я извлекаю значения ID] [2]

Вот кодчто я написал до сих пор.

from bs4 import BeautifulSoup

webpage_response = requests.get('https://www.example.com/products/', headers={'authority': 'www.example.com', 'method': 'GET', 'path': '/products/', 'scheme': 'https', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.9', 'cache-control': 'max-age=0', 'referer': 'https://www.example.com/products', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'same-origin', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'})

webpage = webpage_response.content
soup = BeautifulSoup(webpage, 'lxml')

for li in soup.find_all("li", {"class":"productData"}):
    for link in li.select("a.fn"):
        url = link.get('href')
        webpage2_response = requests.get(url, headers={'authority': 'www.example.com', 'method': 'GET', 'path': '/products/', 'scheme': 'https', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'en-US,en;q=0.9', 'cache-control': 'max-age=0', 'referer': 'https://www.example.com/products', 'sec-fetch-mode': 'navigate', 'sec-fetch-site': 'same-origin', 'sec-fetch-user': '?1', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36'})
        webpage2 = webpage_response2.content
        soup = BeautifulSoup(webpage, "lxml")
        for div in soup.find_all("div", {"class":"size "}):
            for pid in div.select("a.selectSize"):
                print pid['id']


  [1]: https://i.stack.imgur.com/sMl7s.png
  [2]: https://i.stack.imgur.com/EX6T9.png

1 Ответ

0 голосов
/ 13 октября 2019

Я не слишком часто использую BeautifulSoup, но вы можете попробовать использовать модуль re ( link ). Вот кое-что, что найдет все URL-адреса href, что означает, что вам нужно либо преобразовать webpage_reponse.content из байтов в utf-8, либо просто использовать webpage_response.text:

UPDATE: повторный поиск адресов с поиском значений id:

import re

# Regular expression
ssize_pat = r'<a class\="selectSize" id\="(.*)"\s+?.*<\/a>'


# re.findall() with re.MULTILINE (or re.M) flag 
# to ignore newline characters (\n) in our search

ids = re.findall(ssize_pat, webpage_response.text, re.M)

Пример вывода из примера на фото:

In [0]: ids
Out[0]: ['44927']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...