Извлечение данных таблицы с веб-сайта с использованием Python - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь получить информацию, относящуюся к любому веб-сайту, к которому пытается получить доступ пользователь. Чтобы остановить любой злонамеренный доступ к веб-сайту, мне нужны такие данные, как статус черного списка, IP-адрес, местоположение сервера и т. Д. Я получил это с веб-сайта URLVOID. <<a href="https://www.urlvoid.com/scan/" rel="nofollow noreferrer">https://www.urlvoid.com/scan/>

Я получаю следующие результаты в табличном формате и пытаюсь получить то же самое в spyder. См. Таблицу

Я использую подход регулярных выражений, чтобы узнать подробности из таблицы.

######

import httplib2 
import re
def urlvoid(urlInput):                
    h2 = httplib2.Http(".cache")
    resp, content2 = h2.request(("https://www.urlvoid.com/scan/" + urlInput), "GET")
    content2String = (str(content2))
    rpderr = re.compile('\<div\sclass\=\"error\"\>', re.IGNORECASE)
    rpdFinderr = re.findall(rpderr,content2String)
    if "error" in str(rpdFinderr):
        ipvoidErr = True
    else:
        ipvoidErr = False
    if ipvoidErr == False:

        rpd2 = re.compile('(?<=Server Location</span></td><td>)[a-zA-Z0-9.]+(?=</td></tr>)')
        rpdFind2 = re.findall(rpd2,content2String)
        rpdSorted2=sorted(rpdFind2)

    return rpdSorted2

urlvoid("google.com")
######

Однако, это не очень эффективно, и это регулярное выражение работает не со всеми веб-сайтами. Есть ли более простой способ получить всю эту информацию?

1 Ответ

0 голосов
/ 15 ноября 2018

Я не предлагаю вам очищать данные с помощью регулярных выражений, потому что это можно сделать с помощью bs4, и если вы создадите регулярное выражение для выполнения, вам понадобится много времени и сложные условия.

import requests
from bs4 import BeautifulSoup,NavigableString
import re

def urlvoid(urlInput):
    url = "https://www.urlvoid.com/scan/" + urlInput
    res = requests.get(url)
    text = res.text
    soup = BeautifulSoup(text,"lxml").find("table",class_="table table-custom table-striped")
    all_tr = soup.find_all("tr")
    value = { tr.find_all("td")[0].text : 
                tr.find_all("td")[1].text.replace("\xa0","")
                for tr in all_tr}
    print(value)

urlvoid("google.com")
...