在使用BeautifulSoup和pandas将索引与标头值匹配的同时,在标头下方刮擦文本

avgjoe13

我能够在下面的代码中将标题索引与标题文本索引进行匹配。我不明白的是,当标头不在汤中时附加np.NaN。这是我上一个问题的跟进

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

def getAndParseURL(url):
    result = requests.get(url)
    soup = BeautifulSoup(result.text, 'html.parser')
    return(soup)

urls_test = ['https://www.example.com/',
            'https://www.example.com/']

engine = []
trans = []
color = []
interior = []

for url in urls_test:
    soup = getAndParseURL(url)
    ul   = soup.select('ul[class="list-inline lot-breakdown-list"] li', recursive=True)
    lis_e0 = []
    lis_e1 = []
    if ul:
        for li in ul:
            lis0 = []
            lis1 = []
            lis0.append(li.h5.contents[0])
            lis1.append(li.contents[1])
            lis_e0.extend(lis0) 
            lis_e1.extend(lis1) 
        try:        
            for i in range(min(len(lis_e1), len(lis_e0))):
                if 'Engine' in lis_e0[i]:
                    engine.append(lis_e1[i])   
        except:
            engine.append(np.NaN)
        try:
            for i, (x, y) in enumerate(zip(lis_e0, lis_e1)):
                if 'Trans' in x:
                    trans.append(lis_e1[i])  
        except:
            trans.append(np.NaN)
        try:
            for i, (x, y) in enumerate(zip(lis_e0, lis_e1)):
                if 'Color' in x:
                    color.append(lis_e1[i])  
        except:
            color.append(np.NaN)
        try:
            for i, (x, y) in enumerate(zip(lis_e0, lis_e1)):
                if 'Interior' in x:
                    interior.append(lis_e1[i])  
        except:
            interior.append(np.NaN)
    else:
        engine.append(np.NaN)
        trans.append(np.NaN)
        color.append(np.NaN)
        interior.append(np.NaN)

engine
trans
color
interior

print(str(len(engine)))
print(str(len(trans)))
print(str(len(color)))
print(str(len(interior)))

Out:
['383 CI']
['Automatic']
['Green', 'Curious Yellow']
['Black', 'Black']
1
1
2
2

在我正在寻找的输出下方(“引擎”的for循环不同,但应该工作相同)。长度必须与URL的数量相匹配,否则在抓取多个URL时,列表索引将与正确的URL不对应。感谢您抽出宝贵的时间!

['NaN', '383 CI']
['NaN', 'Automatic']
['Green', 'Curious Yellow']
['Black', 'Black']
2
2
2
2
昆杜克

使用try..except块。

import requests
from bs4 import BeautifulSoup

def getAndParseURL(url):
    result = requests.get(url)
    soup = BeautifulSoup(result.text, 'html.parser')
    return(soup)

urls_test = ['https://www.example.com/',
            'https://www.example.com/']

engine = []
trans = []
color = []
interior = []

for url in urls_test:
    soup = getAndParseURL(url)

    try:
        soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5',text='Engine')
        engine.append(soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5',text='Engine').next_element.next_element)
    except:
        engine.append("Nan")

    try:
        soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5', text='Trans')
        trans.append(soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5', text='Trans').next_element.next_element)
    except:
        trans.append("Nan")

    try:
        soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5',text='Color')
        color.append(soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5',text='Color').next_element.next_element)
    except:
        color.append("Nan")

    try:
        soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5',text='Interior')
        interior.append(soup.select_one('ul[class="list-inline lot-breakdown-list"]>li').find_next('h5',text='Interior').next_element.next_element)
    except:
        interior.append("Nan")

print(engine)
print(trans)
print(color)
print(interior)

输出

['Nan', '383 CI']
['Nan', 'Automatic']
['Green', 'Curious Yellow']
['Black', 'Black']

加载到DataFrame中。

df=pd.DataFrame({"Engine" : engine,"Trans" : trans,"Color" : color,"Interior":interior})
print(df)

输出

            Color  Engine Interior      Trans
0           Green     Nan    Black        Nan
1  Curious Yellow  383 CI    Black  Automatic

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用标头索引和csv格式化值

来自分类Dev

使用较小的匹配标头从大文件中检索文本

来自分类Dev

Python 值与标头不匹配

来自分类Dev

使用行索引和标头将numpy数组写入CSV

来自分类Dev

将csv文件的标头和值转换为列表

来自分类Dev

将文本绑定到gridview标头

来自分类Dev

UWP和标头

来自分类Dev

将导航栏移动到标头引导程序下方

来自分类Dev

刮除dataTable仅获取标头

来自分类Dev

在@PreAuthorize中使用请求标头值

来自分类Dev

使用 HttpUrlConnection 发送标头值

来自分类Dev

使用以下方法将标头固定在容器顶部:auto;

来自分类Dev

BeautifulSoup-返回与匹配的页脚对应的标头

来自分类Dev

限制在标头和源中的使用

来自分类Dev

GroupBox标头文本被截断

来自分类Dev

如何更改jtable标头下方的字体

来自分类Dev

使用BeautifulSoup刮擦Javascript注入的文本

来自分类Dev

如何使用上游主机的响应标头同时提供默认值?

来自分类Dev

如何分割标头值?

来自分类Dev

awk在特定的str匹配和标头之后对分组行中的值求和

来自分类Dev

2个文件中列值的划分,用于匹配ID和标头

来自分类Dev

如何创建新列,将值与其他数据框中的标头匹配

来自分类Dev

熊猫-将数据框的标头和索引导出到Excel会导致TypeError

来自分类Dev

Themeroller标头和Phonegap

来自分类Dev

Codeigniter redirect()和标头

来自分类Dev

Codeigniter redirect()和标头

来自分类Dev

SQLite标头和源版本不匹配

来自分类Dev

如何在春季集成中使用标头过滤器删除标头值?

来自分类Dev

SOAP安全标头和SOAP标头之间的区别