Элемент разбора Python - PullRequest
       10

Элемент разбора Python

0 голосов
/ 11 мая 2019

Я хочу разобрать некоторую информацию со страницы, но у меня есть проблемы, потому что я не могу разобрать что-то без идентификатора или класса.Теперь у меня есть тег div с изображением внутри и некоторым текстом (числами), мне нужно получить эти цифры, но у этого div есть только тег стиля, и я не могу использовать этот тег стиля, потому что он всегда менялся.

У меня есть что-то вроде игрового сайта аукциона и пытаюсь разобрать название предмета, цену и ссылку.Но теперь я могу получить только имена.

Я пытаюсь найти все «а» для div с классом отца.я пытаюсь найти hrefs я пытаюсь найти по стилю

def rshp_parse (base_url, headers):
    session = requests.Session()
    request = session.get(base_url, headers=headers)
    if request.status_code == 200:
        soup = bs(request.content, 'html.parser')
        divs = soup.find_all('div', class_={'shop-search-row'})
        for div in divs:
            title = div.find('span').text
            price = div.find('div')
            href = div.find('a', class_={'champions_container'})['href']
            # href = soup.find('div', style='color:#FFFFFF;text-decoration:none')

HTML

<div style="display:inline-block;width:15%;line-height:50px;vertical-align:top;white-space: nowrap;">
            <img src="/assets/rpc/shard.png" style="width:20px">35,000
        </div>

35,000 - это то, что мне нужно

<a href="/market/auction/1227124" target="_blank" style="color:#FFFFFF;text-decoration:none">

и эта ссылка

1 Ответ

1 голос
/ 11 мая 2019

Вы можете восстановить «таблицу» следующим образом. С помощью фрейма данных вы можете использовать обычный синтаксис панд для доступа к любому элементу.

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd
import numpy as np

r = requests.get('https://www.roshpit.ca/market/browse')
soup = bs(r.content, 'lxml')
results = []

for row in soup.select('.shop-search-row'):
    name = row.select_one('.item_image + span').text
    seller = row.select_one('div:nth-child(3)').text.strip()
    bid = row.select_one('div:nth-child(4)').text.strip()
    buyout = row.select_one('div:nth-child(5)').text.strip()
    ends = row.select_one('div:nth-child(6)').text.strip()
    listing = [name, seller, bid, buyout, ends]
    results.append(listing)

df = pd.DataFrame(results, columns = ['name', 'seller' , 'bid' , 'buyout' , 'ends'])
df = df.replace(r'^\s*$', np.nan, regex=True)
df.buyout = df.buyout.str.replace(',', '').astype(float)
df[df['name'].str.contains("Hammer") & (df["buyout"] < 50000)]
...