【问题标题】:extract href using pandas read_html使用 pandas read_html 提取 href
【发布时间】:2019-11-07 11:33:59
【问题描述】:

作为我工作的一部分,我需要定期查看此page 以获取特定文件。我发现我可以使用 pandas 的方法read_html 成功地将表格读入数据框(这很方便,因为我可以通过关键字轻松查询特定文档)。 我现在遇到的问题是此方法无法解析我需要的链接,而是保存纯文本(具体来说,我指的是第二列,其数字类似于“1682/0/15-19”)。

我想出的代码很简单:

import pandas as pd

df = pd.read_html('http://www.vru.gov.ua/act_list')[0]

这给了我一个数据框,其中包含我需要的所有信息,除了链接。

是否有可能以某种方式获取链接而不是纯文本,如果可以,我该怎么做?

我知道如果我使用了 Requests 和 BeautifulSoup 库,就可以获得 href 链接,但我不知道 BeautifulSoup 库是否足够好。 有什么建议吗?还是我应该只学 BeautifulSoup?

【问题讨论】:

  • 您在“Номер”列中寻找的链接吗?如果是这样,您是否正在寻找(例如)`http://www.vru.gov.ua/act/18641'形式的链接列表?
  • pandas read_html(),据我所知,只会解析来自<table> 标签的内容,而不是任何其他关联的属性。你必须使用 BeautifulSoup。有很多教程可以看。谷歌搜索会让你找到许多可用的
  • 这里有一些潜在的解决方案:stackoverflow.com/questions/31771619/…
  • @JackFleeting,是的,你是对的!
  • @MichaelB 谢谢!这帮助很大!

标签: html pandas web-scraping beautifulsoup python-requests


【解决方案1】:

您可以通过快速谷歌搜索找到教程。您必须遍历标签以编译列表,然后将数据列表转换为数据框:

您也可以像使用 read_html() 一样直接拉表,但您仍然需要返回并获取 html 链接(请参阅下面的选项 2):

import pandas as pd
import requests
from bs4 import BeautifulSoup


url = 'http://www.vru.gov.ua/act_list'



response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table')

records = []
columns = []
for tr in table.findAll("tr"):
    ths = tr.findAll("th")
    if ths != []:
        for each in ths:
            columns.append(each.text)
    else:
        trs = tr.findAll("td")
        record = []
        for each in trs:
            try:
                link = each.find('a')['href']
                text = each.text
                record.append(link)
                record.append(text)
            except:
                text = each.text
                record.append(text)
        records.append(record)

columns.insert(1, 'Link')
df = pd.DataFrame(data=records, columns = columns)

选项 2:

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = 'http://www.vru.gov.ua/act_list'
df = pd.read_html(url)[0]

response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table')

links = []
for tr in table.findAll("tr"):
    trs = tr.findAll("td")
    for each in trs:
        try:
            link = each.find('a')['href']
            links.append(link)
        except:
            pass

df['Link'] = links

输出:

print (df.to_string())
     №                             Link           Номер Вид документу Дата прийняття                                    Назва документу Примiтки
0    1  http://www.vru.gov.ua/act/18641    1682/0/15-19       Рішення     20-06-2019  Про звільнення Бурана О.М. з посади судді Мали...         
1    2  http://www.vru.gov.ua/act/18643    1684/0/15-19        Ухвала     20-06-2019  Про задоволення заяви члена Вищої ради правосу...         
2    3  http://www.vru.gov.ua/act/18644    1685/0/15-19        Ухвала     20-06-2019  Про відмову у задоволенні заяви адвоката Рохма...         
3    4  http://www.vru.gov.ua/act/18649    1690/0/15-19        Ухвала     20-06-2019  Про продовження строку розгляду скарги судді Х...         
4    5  http://www.vru.gov.ua/act/18650    1691/0/15-19       Рішення     20-06-2019  Про нагородження заохочувальною відзнакою Вищо...         
5    6  http://www.vru.gov.ua/act/18651    1692/0/15-19       Рішення     20-06-2019  Про інформацію робочої групи Вищої ради правос...         
6    7  http://www.vru.gov.ua/act/18619  1660/3дп/15-19        Ухвала     19-06-2019  Про відкриття дисциплінарної справи стосовно с...         
7    8  http://www.vru.gov.ua/act/18620  1661/3дп/15-19        Ухвала     19-06-2019  Про відмову у відкритті дисциплінарних справ з...         
8    9  http://www.vru.gov.ua/act/18624  1665/3дп/15-19        Ухвала     19-06-2019  Прo задоволення заяви члена Третьої Дисципліна...         
9   10  http://www.vru.gov.ua/act/18626  1667/3дп/15-19        Ухвала     19-06-2019  Прo задоволення заяви члена Третьої Дисципліна...         
10  11  http://www.vru.gov.ua/act/18627  1668/3дп/15-19        Ухвала     19-06-2019  Про відмову у відкритті дисциплінарних справ з...         
11  12  http://www.vru.gov.ua/act/18628  1669/3дп/15-19        Ухвала     19-06-2019  Про відмову у відкритті дисциплінарних справ з...         
12  13  http://www.vru.gov.ua/act/18635  1676/2дп/15-19        Ухвала     19-06-2019  Про відкриття дисциплінарної справи стосовно с...         
13  14  http://www.vru.gov.ua/act/18638  1679/2дп/15-19        Ухвала     19-06-2019  Про відмову у відкритті дисциплінарної справи ...         
14  15  http://www.vru.gov.ua/act/18639  1680/2дп/15-19        Ухвала     19-06-2019  Про відмову у відкритті дисциплінарних справ з...         
15  16  http://www.vru.gov.ua/act/18640  1681/2дп/15-19        Ухвала     19-06-2019  Про відмову у відкритті дисциплінарних справ з...         
16  17  http://www.vru.gov.ua/act/18607    1648/0/15-19       Рішення     18-06-2019  Про звільнення Лучко О.О. з посади судді Івано...         
17  18  http://www.vru.gov.ua/act/18608    1649/0/15-19        Ухвала     18-06-2019  Про залишення без розгляду заяви Лазаренко В.В...         
18  19  http://www.vru.gov.ua/act/18609    1650/0/15-19        Ухвала     18-06-2019  Про залишення без розгляду подання Третьої Дис...         
19  20  http://www.vru.gov.ua/act/18610    1651/0/15-19        Ухвала     18-06-2019  Про залишення без розгляду подання Другої Дисц...         
20  21  http://www.vru.gov.ua/act/18615    1656/0/15-19       Рішення     18-06-2019  Про затвердження висновків членів Вищої ради п...         
21  22  http://www.vru.gov.ua/act/18586    1627/0/15-19       Рішення     13-06-2019  Про звільнення Римлянської Г.О.               ...         
22  23  http://www.vru.gov.ua/act/18589    1630/0/15-19       Рішення     13-06-2019  Про затвердження висновку члена Вищої ради пра...         
23  24  http://www.vru.gov.ua/act/18590    1631/0/15-19       Рішення     13-06-2019                   Про призначення Максимішина С.Т.         
24  25  http://www.vru.gov.ua/act/18591    1632/0/15-19       Рішення     13-06-2019                     Про призначення Гавришука О.М.   

【讨论】:

猜你喜欢
  • 2017-01-07
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
相关资源
最近更新 更多