Пишем парсер на Python - грабим Proxy ч.1

Переписал парсер под этот сайт. Учите Python, 10 минут заняло. Работает в Windows и Linux.


Python:
import requests
from bs4 import BeautifulSoup


def get_html(site):
    r = requests.get(site)
    return r.text


def get_page_data(html):
    soup = BeautifulSoup(html, 'html.parser')
    line = soup.find('table', {'class': 'htable proxylist'}).find('tbody').find_all('tr')

    for tr in line:
        td = tr.find_all('td')
        proxy = td[0].text
        types = td[1].text
        country = td[2].text
        last_checked = td[3].text

        data = {'Proxy': proxy,
                'Type': types,
                'Country': country,
                'Last Checked': last_checked
                }

        print(str(data)[1:-1])


def main():
    url = 'https://www.ip-adress.com/proxy-list'
    get_page_data(get_html(url))


if __name__ == '__main__':
    main()
Благодарю вас! В файл он не сохраняет, сам допишу. Спасибо.
 
Переписал парсер под этот сайт. Учите Python, 10 минут заняло. Работает в Windows и Linux.


Python:
import requests
from bs4 import BeautifulSoup

.....

Спасибо за код!
А как правильно добавить условие, например чтоб считывать только если country = 'United States' ?
 
А как правильно добавить условие, например чтоб считывать только если country = 'United States' ?

Это легко:


Python:
import requests
from bs4 import BeautifulSoup


def get_html(site):
    r = requests.get(site)
    return r.text


def get_page_data(html):
    soup = BeautifulSoup(html, 'html.parser')
    line = soup.find('table', {'class': 'htable proxylist'}).find('tbody').find_all('tr')

    for tr in line:
        td = tr.find_all('td')
        proxy = td[0].text
        types = td[1].text
        country = td[2].text
        last_checked = td[3].text

        data = {'Proxy': proxy,
                'Type': types,
                'Country': country,
                'Last Checked': last_checked
                }
        if 'United States' in td[2].text:
            print(str(data)[1:-1])


def main():
    url = 'https://www.ip-adress.com/proxy-list'
    get_page_data(get_html(url))


if __name__ == '__main__':
    main()
 
  • Нравится
Реакции: KDST
Просьба к Explorer’y...
Ты не мог бы написать пример парсера, которые уже работает через прокси (через те что награбили) + автозамена user-agenta
 
Просьба к Explorer’y...
Ты не мог бы написать пример парсера, которые уже работает через прокси (через те что награбили) + автозамена user-agenta
Для смены юзерагентов есть уже готовая библиотека
И прежде чем использовать награбленные прокси, их нужно чекать на валидность, так как халявные прокси очень быстро имеют свойства умирать. Используете библиотеку проверяете ответ сервера, если сервер ответил кодом 200, значит прокси работает. Если работает, то используем прокси, если нет, то пропускаем и проверяем следующий.

Использовать прокси в коде просто:
headers ={здесь постоянный или рандомный юзер-агент пишется}
proxies = {"https": " "}
здесь указывает протокол и адрес
page = requests.get(headers=headers, proxies=proxies) запрос через прокси и юзерагента
 
  • Нравится
Реакции: gydman
Для смены юзерагентов есть уже готовая библиотека
И прежде чем использовать награбленные прокси, их нужно чекать на валидность, так как халявные прокси очень быстро имеют свойства умирать. Используете библиотеку проверяете ответ сервера, если сервер ответил кодом 200, значит прокси работает. Если работает, то используем прокси, если нет, то пропускаем и проверяем следующий.

Использовать прокси в коде просто:
headers ={здесь постоянный или рандомный юзер-агент пишется}
proxies = {"https": " "}
здесь указывает протокол и адрес
page = requests.get(headers=headers, proxies=proxies) запрос через прокси и юзерагента
Благодарю
 
Всем привет.
Получаю вот такое.
line 12, in get_page_data
line = soup.find('table', {'class': 'htable proxylist'}).find('tbody').find_all('tr')
AttributeError: 'NoneType' object has no attribute 'find'
Переписал парсер под этот сайт. Учите Python, 10 минут заняло. Работает в Windows и Linux.


Python:
import requests
from bs4 import BeautifulSoup


def get_html(site):
    r = requests.get(site)
    return r.text


def get_page_data(html):
    soup = BeautifulSoup(html, 'html.parser')
    line = soup.find('table', {'class': 'htable proxylist'}).find('tbody').find_all('tr')

    for tr in line:
        td = tr.find_all('td')
        proxy = td[0].text
        types = td[1].text
        country = td[2].text
        last_checked = td[3].text

        data = {'Proxy': proxy,
                'Type': types,
                'Country': country,
                'Last Checked': last_checked
                }

        print(str(data)[1:-1])


def main():
    url = 'https://www.ip-adress.com/proxy-list'
    get_page_data(get_html(url))


if __name__ == '__main__':
    main()
И ваш код не исправил эту ошибку.

Не бейте сильно, только учусь ))
 
У вас написано 'htable proxylist' лишний символ, должно быть 'table proxylist'
Это ваш код :-)

После правки к сожалению ошибка никуда не делась.
Я конечно не спец, но вроде как 'htable'
1638478382460.png
 
  • Нравится
Реакции: thelegend
Названия тегов на сайте я вижу по вашему скрину сменились, значит код нужно править, старый не актуален.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!