извлечь href используя панд read_html - PullRequest
0 голосов
/ 25 июня 2019

Как часть моей работы, мне нужно регулярно проверять эту страницу на наличие конкретных документов.Я обнаружил, что могу использовать метод 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?

1 Ответ

1 голос
/ 25 июня 2019

Вы можете найти учебники с помощью быстрого поиска Google. Вам нужно будет пройтись по тегам, чтобы составить список, а затем превратить список данных в фрейм данных:

Вы также можете просто вытянуть таблицу, как вы это делали с 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                     Про призначення Гавришука О.М.   
...