Python解析元素

时间:2019-05-11 18:11:17

标签: python parsing web-scraping beautifulsoup python-requests

我想解析页面中的一些信息,但是有一些麻烦,因为我无法解析没有id或class的内容。 现在我有带有图像的div标签和一些文本(数字),我需要获取此数字,但是此div仅具有样式标签,我无法使用此样式标签,因为他总是在更改。

我有类似游戏网站拍卖之类的东西,试图解析商品名称,价格和链接。 但是现在我只能得到名字。

im试图为父类的div查找所有“ a”。 我试图找到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 个答案:

答案 0 :(得分:1)

您可以按以下方式重建“表”。通过数据框,您可以使用常规的pandas语法访问任何元素。

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)]