我应该如何抓取 <ul> 中的所有 <em> 标签内部文本并将它们制作成 pandas 数据框?

How should I scrape all <em> tag innertexts within a <ul> and make them into a pandas dataframe?

我目前正在尝试从网站上抓取我想要的信息。

我想要的信息包含在ul>li>em中。我以前也爬过表格,但我从来没有爬过列表。

我应该如何抓取我想要的信息?

另外我想知道有没有办法把<em>里面的所有内文都做成一个dataframe.

<ul>基本上是这样的

<ul class="reportData">
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>

                   ......

        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
</ul>

只需 select 您的 <ul> 并在本例中使用 stripped_strings 获取列表中的所有文本:

data = soup.select_one('ul.reportData').stripped_strings

或更具体 list comprehension 来自所有 em

data = [e.text for e in soup.select('ul.reportData em')]

例子

import pandas as pd
from bs4 import BeautifulSoup

html='''
<ul class="reportData">
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
</ul>
'''

soup = BeautifulSoup(html)

data = soup.select_one('ul.reportData').stripped_strings

pd.DataFrame(data, columns=['date'])

输出

date
2015-12-28
2015-12-28
2015-12-28
2015-12-28
2015-12-28

find_all returns一个列表,可以直接导入pandas:

from bs4 import BeautifulSoup
import pandas as pd

html = '''<ul class="reportData">
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
        <li><em>2015-12-28</em></li>
</ul>'''

soup = BeautifulSoup(html)
df = pd.DataFrame([i.get_text() for i in soup.find('ul', class_='reportData').find_all('em')], columns=['date'])