Не удается получить название различных вакансий с веб-страницы - PullRequest
0 голосов
/ 24 февраля 2020

Я написал скрипт в python, использующий селен, чтобы получить название различных заданий, проходящих через несколько страниц с веб-страницы. когда я запускаю скрипт, я могу заметить, что селен не может открыть эту веб-страницу. Тем не менее, я мог видеть содержимое этой страницы без каких-либо проблем, используя эту ссылку вручную в inte rnet explorer или chrome.

ссылка на веб-страницу # Если вы не видите содержание, обязательно обновите sh страницу

Я пробовал с:

from bs4 import BeautifulSoup
from selenium import webdriver

URL = 'https://www.alljobs.co.il/SearchResultsGuest.aspx?page=1&position=235,330,320,236,1541&type=&city=&region='

with webdriver.Chrome() as driver:
    driver.get(URL)
    soup = BeautifulSoup(driver.page_source,'lxml')

    while True:
        for item in soup.select('[class="job-content-top"]'):
            title = item.select_one('.job-content-top-title a[title')
            print(title)

        try:
            next_page = driver.find_elemeny_by_css_selector('.jobs-paging-next > a').click()
            soup = BeautifulSoup(driver.page_source,'lxml')
        except Exception:
            break

Я даже пытался, как это, но это тоже не сработало (собранный повар ie из браузера):

from bs4 import BeautifulSoup
from selenium import webdriver

URL = 'https://www.alljobs.co.il/SearchResultsGuest.aspx?page=1&position=235,330,320,236,1541&type=&city=&region='

cookie = "_ga=GA1.3.1765365490.1582505881; _gid=GA1.3.568643527.1582505881; _fbp=fb.2.1582505881473.1930545410; _hjid=619e3a88-ee5a-43ca-8a0b-e70b063dcf84; BlockerDisplay=; DiplayPopUpSalarySurvey=; OB-USER-TOKEN=390dca4f-08d0-4f54-bce5-00e7e6aa3e39; LPVID=dkY2EwOTNmZTA4YTM1MDI1; HomePageBlocker=1; rbzsessionid=123a4166f92dc4aeb8e66b510e6736f8; ASP.NET_SessionId=f4v4gictcer0qb3qxfptyz1s; GoogleAnalytics_clientId=1765365490.1582505881; _hjIncludedInSample=1; __za_cd_19761230=%7B%22visits%22%3A%22%5B1582513388%2C1582505890%5D%22%2C%22campaigns_status%22%3A%7B%2212147%22%3A1582505953%7D%2C%22historical_goals%22%3A%7B%2254918.54919%22%3A1%2C%2254918.54920%22%3A1%7D%7D; __za_19761230=%7B%22sId%22%3A79638407%2C%22dbwId%22%3A%221%22%2C%22sCode%22%3A%229c1bb50dc33a43741f30126a710f85be%22%2C%22sInt%22%3A5000%2C%22aLim%22%3A1000%2C%22asLim%22%3A100%2C%22na%22%3A0%2C%22td%22%3A1%2C%22ca%22%3A%221%22%7D; __za_cds_19761230=%7B%22data_for_campaign%22%3A%7B%22country%22%3A%22BD%22%2C%22language%22%3A%22EN%22%2C%22ip%22%3A%2245.118.60.18%22%2C%22start_time%22%3A1582513384000%7D%7D; Eloqua=6292d5d5-0f5c-4d0d-8899-a8441f467f38; UserLeaveBlocker=1; googtrans=/iw/en; rbzid=Ywp3JQVmhLXmkPbvxMHFcoE2QLA/Pgp9+eoVrkplSyW/kRRXVTIl8UHjpYV1AVBEvxuHW6KVr8P0N1dlQxqo/TvVEMJ1XfqWI6BZ2HFAUOmgpFx0ubceolso09c3RxkYYHyT1VN6F8nK+skcbbendfbahodU69GZoOGvLaOs142Ws7gmiO9j3AMUflwI3oBKBX/U4Qv8ueUdFb17+mkYKg==; MitugLastZone=200; _gat=1"

options = webdriver.ChromeOptions()
options.add_argument("--User-Agent=Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36")
options.add_argument("--Referer=https://www.alljobs.co.il/SearchResultsGuest.aspx?page=1&position=235,330,320,236,1541&type=&city=&region=")
options.add_argument(f"--Cookie={cookie}")
driver = webdriver.Chrome(options=options)
driver.get(URL)

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

Ответы [ 2 ]

5 голосов
/ 26 февраля 2020

Похоже, что этот сайт может обнаружить Selenium и не позволяет вам видеть контент.

Есть несколько способов обойти это, в основном, вы можете попытаться сделать ваш Selenium необнаружимым, хорошее резюме о возможных способах сделать это:

Решение, которое работало для меня:

Использование Firefox (я использовал v 72.0.2).

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import FirefoxProfile

URL = 'https://www.alljobs.co.il/SearchResultsGuest.aspx?page=1&position=235,330,320,236,1541&type=&city=&region='

# Set proxy
PROXY_HOST = "12.12.12.123"
PROXY_PORT = "1234"
profile = FirefoxProfile()
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", int(PROXY_PORT))
profile.set_preference("dom.webdriver.enabled", False)
profile.set_preference('useAutomationExtension', False)
profile.update_preferences()

# Set profile
driver = webdriver.Firefox(firefox_profile=profile)
driver.get(URL)

time.sleep(10) # wait for your site to load

soup = BeautifulSoup(driver.page_source,'lxml')
print(soup)

while True:
        for item in soup.select('[class="job-content-top"]'):
            title = item.select_one('.job-content-top-title a[title]')
            print(title)

        try:
            next_page = driver.find_element_by_css_selector('.jobs-paging-next > a').click()
            soup = BeautifulSoup(driver.page_source,'lxml')
        except Exception:
            break

Решение с Chrome :

from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver import ChromeOptions

URL = 'https://www.alljobs.co.il/SearchResultsGuest.aspx?page=1&position=235,330,320,236,1541&type=&city=&region='

options = ChromeOptions()
# This hides Selenium:
options.add_argument('disable-blink-features=AutomationControlled')
driver = webdriver.Chrome(options=options)
driver.get(URL)

time.sleep(5) # wait for it to load

soup = BeautifulSoup(driver.page_source,'lxml')
print(soup)
while True:
        for item in soup.select('[class="job-content-top"]'):
            title = item.select_one('.job-content-top-title a[title]')
            print(title)

        try:
            next_page = driver.find_element_by_css_selector('.jobs-paging-next > a').click()
            soup = BeautifulSoup(driver.page_source,'lxml')
        except Exception:
            break
0 голосов
/ 26 февраля 2020

Чтобы получить диск Chrome или Chromium, вам нужно скачать chromedriver и поместить его в папку, которая находится в пути к вашей системе.

Помните, что вы должны установить путь к исполняемый файл chromedriver. Это возможно, используя следующую строку:

Chrome(executable_path='/path/to/chromedriver')

Вы можете проверить больше документации здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...