Парсер Freelance.ru на Python

Парсер Freelance.ru на Python

На сайте freelance.ru есть одна не очень удобная особенность - заказ открывается в том же самом окне что и список заказов. А я привык сперва открыть все интересные мне заказы во вкладках браузера, а потом по очереди просматривать их. Чтобы решить эту проблему я написал простой парсер сайта freelance.ru на Питон. Парсер вытаскивает заголовки и ссылки с первых трех страниц раздела "Веб дизайн" и формирует из ссылок HTML страничку которую сразу же открывает в браузере по умолчанию. При щелчке на любую сиз ссылок заказ открывается в отдельной вкладке, благодаря тому что парсер добавляет к ссылкам атрибут target="_blank". Сперва приведу весь код программы, а потом объясню каждую команду.

import sys
import re
import urllib.request
import webbrowser

def parsepage(x):
    global zz
    doc = urllib.request.urlopen(x).read().decode('cp1251',errors='ignore')
    match = re.findall("<a class=\"ptitle\" href=\"(.+?)</span></a>", doc)
    if not(match is None):
        for ii in match:
            zz = zz + "<a style=\"text-decoration: none;\" href=\"https://freelance.ru" + ii.replace("\" >", "\" target=\"_blank\">") + "</a><p>"

zz = ""
parsepage("http://freelance.ru/projects/?spec=116")
parsepage("http://freelance.ru/projects/?spec=116&page=2")
parsepage("http://freelance.ru/projects/?spec=116&page=3")
f = open('index.html', 'w')
f.write(zz)
f.close()
webbrowser.open('index.html')
Вначале кода как водится, мы подключаем необходимые нам модули.
import sys
import re
import urllib.request
import webbrowser
Далее объявим функцию, которая собственно и займется парсингом ссылок с заголовками. Сперва мы получим в список match все нахождения ссылок с заголовками с помощью регулярного выражения findall. Далее пройдёмся по элементам списка которые представляют собой ссылку и её название и обернём найденные ссылки в HTML тег a c target="_blank". Полученные нормальные HTML ссылки будем укладывать в переменную zz.
def parsepage(x):
    global zz
    doc = urllib.request.urlopen(x).read().decode('cp1251',errors='ignore')
    match = re.findall("<a class=\"ptitle\" href=\"(.+?)</span></a>", doc)
    if not(match is None):
        for ii in match:
            zz = zz + "<a style=\"text-decoration: none;\" href=\"https://freelance.ru" + ii.replace("\" >", "\" target=\"_blank\">") + "</a><p>"
Вызовем нашу функцию три раза для URL трёх первых страниц раздела Веб дизайн на сайте фриланса. После того как все ссылки будут в переменной zz мы просто запишем эту переменную в файл index.html и откроем его в браузере.
zz = ""
parsepage("https://freelance.ru/projects/?spec=116")
parsepage("https://freelance.ru/projects/?spec=116&page=2")
parsepage("https://freelance.ru/projects/?spec=116&page=3")
f = open('index.html', 'w')
f.write(zz)
f.close()
webbrowser.open('index.html')
Если добавить в данный парсер фильтры по ключевым словам в заголовках можно еще более улучшить список ссылок, исключив ненужные проекты или наоборот, выбрав по ключевым словам только нужные.

Парсер Freelance.ru на Python Лого Pythono.ru Парсер Freelance.ru на Python