使用BeautifulSoup到Dataframe进行Web抓取

Pratibha UR

这是html代码:

    <div class="wp-block-atomic-blocks-ab-accordion ab-block-accordion ab-font-size-18"><details><summary class="ab-accordion-title"><strong>American Samoa</strong></summary><div class="ab-accordion-text">
    <ul><li><strong><a href="https://www.americansamoa.gov/covid-19-advisories" target="_blank" rel="noreferrer noopener" aria-label="American Samoa Department of Health Travel Advisory (opens in a new tab)">American Samoa Department of Health Travel Advisory</a></strong></li><li>March 2, 2020—Governor&nbsp;Moliga&nbsp;<a rel="noreferrer noopener" href="https://www.rnz.co.nz/international/pacific-news/410783/american-samoa-establishes-govt-taskforce-to-plan-for-coronavirus" target="_blank">appointed</a>&nbsp;a government taskforce&nbsp;to provide a plan for preparation and response to the covid-19 coronavirus.&nbsp;</li></ul>
    
    <ul><li>March 25, 2020 – The Governor <a href="https://6fe16cc8-c42f-411f-9950-4abb1763c703.filesusr.com/ugd/4bfff9_2d3c78a841824b8aafe05032f853585b.pdf">issued</a> an Executive Order 001 recognizing the Declared Public Health Emergency and State of Emergency, and imminent threat to public health. The order requires the immediate and comprehensive enforcement by the Commissioner of Public Safety, Director of Health, Attorney General, and other agency leaders.
    <ul>
    <li>Business are also required to provide necessary supplies to the public and are prohibited from price gouging.</li>
    </ul>
    </li></ul>
</div></details></div>

我想提取状态,日期和文本,并使用这三列添加到数据框

州:美属萨摩亚
日期:2020-03-25
文本:州长001号行政命令,承认已宣布的公共卫生紧急状态和紧急状态,以及对公共卫生的迫在眉睫的威胁

到目前为止,我的代码:

soup = bs4.BeautifulSoup(data)
for tag in soup.find_all("summary"):
    print("{0}: {1}".format(tag.name, tag.text))
    for tag1 in soup.find_all("li"):
        #print(type(tag1))
        ln = tag1.text
        dt = (ln.split(' – ')[0])
        dt = (dt.split('—')[0])
        #txt = ln.split(' – ')[1]
        print(dt)

需要帮忙:

  1. 如何获取文本直到“。” 只是,我不需要整个测试
  2. 我遍历时如何作为新行添加到数据框中(我仅在网页的源代码中附加了一部分)

感谢你的帮助!

丹德夫

首先,我添加了以下代码。不幸的是,该网页不是统一的,因为它使用HTML列表,某些ul元素包含嵌套,而ul其他元素则没有。这段代码不是完美的,而是一个起点,例如American Samoa,嵌套ul元素绝对是一团糟,因此仅在中出现一次df

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

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0',
}
# You need to specify User Agent headers or else you get a 403
data = requests.get("https://www.nga.org/coronavirus-state-actions-all/", headers=HEADERS).text
soup = BeautifulSoup(data, 'lxml')
rows_list = []
for detail in soup.find_all("details"):
    state = detail.find('summary')
    ul = detail.find('ul')
    for li in ul.find_all('li', recursive=False):
        # Three types of hyphen are used on this webpage
        split = re.split('(?:-|–|—)', li.text, 1)
        if len(split) == 2:
            rows_list.append([state.text, split[0], split[1]])
        else:
            print("Error", li.text)
df = pd.DataFrame(rows_list)
with pd.option_context('display.max_rows', None, 'display.max_columns', None, 'display.max_colwidth', -1):
    print(df)

它创建并打印一个具有547行的数据框,并为无法拆分的文本打印一些错误消息。您将必须准确确定所需的数据以及如何调整代码以适合您的目的。

如果未安装“ lxml”,则可以使用“ html.parser”。

更新的另一种方法是使用正则表达式匹配以日期开头的任何字符串:

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

HEADERS = {
    'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:77.0) Gecko/20100101 Firefox/77.0',
}
# You need to specify User Agent headers or else you get a 403
data = requests.get("https://www.nga.org/coronavirus-state-actions-all/", headers=HEADERS).text
soup = BeautifulSoup(data, 'html.parser')
rows_list = []
for detail in soup.find_all("details"):
    state = detail.find('summary')
    for li in detail.find_all('li'):
        p = re.compile(r'(\s*(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s*(\d{1,2}),*\s*(\d{4}))', re.IGNORECASE)
        m = re.match(p, li.text)
        if m:
            rows_list.append([state.text, m.group(0), m.string.replace(m.group(0), '')])
        else:
            print("Error", li.text)
df = pd.DataFrame(rows_list)
df.to_csv('out.csv')

这给出了更多记录4,785。同样,这是一个起点,一些数据被遗漏了,但是少得多。它将数据写入csv文件out.csv。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Beautifulsoup进行网页抓取,带来了不同的内容

来自分类Dev

使用R在imdb中进行Web抓取

来自分类Dev

使用BeautifulSoup遍历URL列表进行Web抓取

来自分类Dev

Web使用BeautifulSoup抓取多个页面

来自分类Dev

使用BeautifulSoup进行多处理以改善Wikipedia抓取

来自分类Dev

使用BeautifulSoup进行Web抓取-无法提取表行

来自分类Dev

在Wikipedia上使用BeautifulSoup进行Web抓取

来自分类Dev

在Python标签中使用BeautifulSoup进行网络抓取

来自分类Dev

使用python和BeautifulSoup进行网络抓取

来自分类Dev

使用BeautifulSoup使用python进行网络抓取,发现错误

来自分类Dev

使用Python,BeautifulSoup进行Web抓取

来自分类Dev

使用Python / BeautifulSoup进行Web抓取:具有指向个人资料的多个链接的网站>需要个人资料内容

来自分类Dev

Python-使用Scrapy进行Web抓取

来自分类Dev

Beautifulsoup的Web抓取问题

来自分类Dev

使用Node.js进行Web抓取

来自分类Dev

使用Python和beautifulsoup进行Web抓取:BeautifulSoup函数可以保存什么?

来自分类Dev

使用Beautifulsoup和Python进行Web抓取不起作用

来自分类Dev

使用R在imdb中进行Web抓取

来自分类Dev

使用xpathSApply在R中进行Web抓取

来自分类Dev

使用R和RVest进行Web抓取

来自分类Dev

使用Web :: Scraper从.onion网站进行抓取

来自分类Dev

使用python beautifulsoup进行网络抓取,等号后获取值

来自分类Dev

使用ThreadPoolExecutor进行错误的Web抓取

来自分类Dev

使用 BeautifulSoup FindAll 进行网页抓取

来自分类Dev

使用python 2.7和beautifulsoup 4进行网站抓取

来自分类Dev

如何使用 BeautifulSoup 进行网页抓取

来自分类Dev

使用 BeautifulSoup 进行网页抓取 -- Python

来自分类Dev

使用 Python BeautifulSoup 进行网页抓取

来自分类Dev

Python - 使用 BeautifulSoup 和 Urllib 进行抓取

Related 相关文章

  1. 1

    使用Beautifulsoup进行网页抓取,带来了不同的内容

  2. 2

    使用R在imdb中进行Web抓取

  3. 3

    使用BeautifulSoup遍历URL列表进行Web抓取

  4. 4

    Web使用BeautifulSoup抓取多个页面

  5. 5

    使用BeautifulSoup进行多处理以改善Wikipedia抓取

  6. 6

    使用BeautifulSoup进行Web抓取-无法提取表行

  7. 7

    在Wikipedia上使用BeautifulSoup进行Web抓取

  8. 8

    在Python标签中使用BeautifulSoup进行网络抓取

  9. 9

    使用python和BeautifulSoup进行网络抓取

  10. 10

    使用BeautifulSoup使用python进行网络抓取,发现错误

  11. 11

    使用Python,BeautifulSoup进行Web抓取

  12. 12

    使用Python / BeautifulSoup进行Web抓取:具有指向个人资料的多个链接的网站>需要个人资料内容

  13. 13

    Python-使用Scrapy进行Web抓取

  14. 14

    Beautifulsoup的Web抓取问题

  15. 15

    使用Node.js进行Web抓取

  16. 16

    使用Python和beautifulsoup进行Web抓取:BeautifulSoup函数可以保存什么?

  17. 17

    使用Beautifulsoup和Python进行Web抓取不起作用

  18. 18

    使用R在imdb中进行Web抓取

  19. 19

    使用xpathSApply在R中进行Web抓取

  20. 20

    使用R和RVest进行Web抓取

  21. 21

    使用Web :: Scraper从.onion网站进行抓取

  22. 22

    使用python beautifulsoup进行网络抓取,等号后获取值

  23. 23

    使用ThreadPoolExecutor进行错误的Web抓取

  24. 24

    使用 BeautifulSoup FindAll 进行网页抓取

  25. 25

    使用python 2.7和beautifulsoup 4进行网站抓取

  26. 26

    如何使用 BeautifulSoup 进行网页抓取

  27. 27

    使用 BeautifulSoup 进行网页抓取 -- Python

  28. 28

    使用 Python BeautifulSoup 进行网页抓取

  29. 29

    Python - 使用 BeautifulSoup 和 Urllib 进行抓取

热门标签

归档