Как я могу вычеркнуть названия различных работ с веб-сайта, используя запросы? - PullRequest
3 голосов
/ 02 марта 2020

Я пытаюсь создать скрипт в python, используя модуль запросов, чтобы вычеркнуть заголовки различных заданий с веб-сайта. Чтобы разобрать название разных работ, мне нужно сначала получить соответствующий ответ с этого сайта, чтобы я мог обработать контент с помощью BeautifulSoup. Однако, когда я запускаю следующий скрипт, я вижу, что скрипт выдает gibberi sh, которые буквально не содержат названий, которые я ищу.

ссылка на сайт (In case you don't see any data, make sure to refresh the page)

Я пробовал с:

import requests
from bs4 import BeautifulSoup

link = 'https://www.alljobs.co.il/SearchResultsGuest.aspx?'

query_string = {
    'page': '1',
    'position': '235',
    'type': '',
    'city': '',
    'region': ''
}

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'
    s.headers.update({"Referer":"https://www.alljobs.co.il/SearchResultsGuest.aspx?page=2&position=235&type=&city=&region="})
    res = s.get(link,params=query_string)
    soup = BeautifulSoup(res.text,"lxml")
    for item in soup.select(".job-content-top [class^='job-content-top-title'] a[title]"):
        print(item.text)

Я даже пытался так:

import urllib.request
from bs4 import BeautifulSoup
from urllib.parse import urlencode

link = 'https://www.alljobs.co.il/SearchResultsGuest.aspx?'

query_string = {
    'page': '1',
    'position': '235',
    'type': '',
    'city': '',
    'region': ''
}

headers={
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36",
    "Referer":"https://www.alljobs.co.il/SearchResultsGuest.aspx?page=2&position=235&type=&city=&region="  
}

def get_content(url,params):
    req = urllib.request.Request(f"{url}{params}",headers=headers)
    res = urllib.request.urlopen(req).read()
    soup = BeautifulSoup(res,"lxml")
    for item in soup.select(".job-content-top [class^='job-content-top-title'] a[title]"):
        yield item.text

if __name__ == '__main__':
    params = urlencode(query_string)
    for item in get_content(link,params):
        print(item)

Как я могу получить заголовки различных заданий, используя запросы?

PS Симулятор браузера здесь не вариант для выполнения задачи.

Ответы [ 2 ]

4 голосов
/ 05 марта 2020

Чтобы успешно получить ожидаемый запрос, вы должны использовать куки. Для URL вам нужно rbzid достаточно cook ie. Вы можете получить его вручную, если срок его действия истечет, вы можете внедрить решение, используя Selenium и Proxy Server, чтобы обновить sh и продолжить очистку с requests.

user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) ' \
             'Chrome/80.0.3987.122 Safari/537.36'
cookies = {
    'rbzid': 'DGF6ckG9dPQkJ0RhPIIqCu2toGvky84UY2z7QpJln31JVdw/YU4wJ7WXe5Tom9VhEvsZT6PikTaeZjJfsKwp'
             'M1TaCZr6tOHaOtE8jX3eWsFX5Zm8TJLeO8+O2fFfTHBf++lRgo/NaYq/sXh+QobO59zQRmZQd0XMjTSpVMDu'
             'YZS8C3GMsIR8cBt9gyuDCYD2XL8pVz68fD4OqBep3G/LnKR4bQsMiLHwKjglQ4fBrq8=',
}
headers = {'User-Agent': user_agent, }
params = (
    ('page', '1'),
    ('position', '235'),
    ('type', ''),
    ('city', ''),
    ('region', ''),
)

response = requests.get('https://www.alljobs.co.il/SearchResultsGuest.aspx',
                        headers=headers, params=params, cookies=cookies)

soup = BeautifulSoup(response.text, "lxml")
titles = soup.select("a[title]")
3 голосов
/ 04 марта 2020

Я бы хотел посмотреть, как выглядит твой гиббери sh. Когда я запустил ваш код, у меня появилось несколько символов иврита (что неудивительно, поскольку сайт написан на иврите) и названия должностей:

לחברת הייטק מובילה, руководитель ИТ-проекта דרושים AllStars-IT Group (MT ) אלעד מערכות מגייסת מפתח / ת JAVA לגוף רפואי גדול היושב בתל אביב! דרושים אלעד מערכות מנתח / ת מערכות ומאפיין / ת דרושים מרטנס הופמן שירותי מחשוב אנשי / נשות תפעול ותמיכה טכנית למוצר אינטרנטי דרושים המימד השלישי DBA SQL / ORACLE דרושים CPS Работа דרושים / ות אנשי / נשות תמיכה על מערכת פריוריטי, שכר מתגמל למתאימים / ות דרושים חבר הון אנושי מפתח / ת SAP ABAP דרושים טאואר סמיקונדקטור דרוש / ה директор данных аналитики דרושים אופיסופט Fullstack Разработчик דרושים SQLink מפתח / ת תשתיות דאטה ותומך תשתית BI דרושים המימד השביעי בע"מ מפתח / ת תשתיות דאטה ותומך / ת תשתית BI דרושים יוניטסק לארגון בעל משמעות גבוהה דרוש / ה תוכניתן / ית ABAP דרושים יוניטסק לחברת טלדור דרוש / ה ארכי ת למערכת פיקוד ובקרה עבור ארגון גדול בתל אביב דרושים טלדור Taldor מערכות מחשבים דרוש / ה מפתח / ת אינטגרציה דרושים SQLink דרוש / ה ראש צוות Полный стек מתכנת / ת Старший инженер-программист менеджер Старший инженер-программист Старший Embedded Software Engineer Embedded Software Engineer Инженер Старший Программное обеспечение Дочерний PMM Manager תוכניתן / ית BackEnd Full Stack / Frontend Software Software Validation Инженер программного обеспечения Главный менеджер по продукту Квантовые алгоритмы Стажер-исследователь Главный / Старший специалист по обнаружению Ведущий инженер службы поддержки Инженер-программист

Ваша проблема, которую вы хотите отфильтровать из еврейских символов? Потому что это просто требует регулярных выражений! Импортируйте повторно пакет, а затем замените свой оператор печати следующим:

print(re.sub('[^A-z0-9]+',' ',item.text))

Надеюсь, это поможет!

...