Ответы пользователя по тегу Парсинг
  • Парсер на Selenium почему то получает не все элементы?

    @Alexa2007
    Это не ошибка парсера, это такая страница, там действительно два одинаковых класса. Придется дописать скрипт, который будет проверять список и удалять дубликаты
    Ответ написан
  • Python invalid literal for int() with base 10: ''?

    @Alexa2007
    отключил куки
    изменил "User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
    В этом методе получил результат
    def count_page(self):
            page_count = self.session.get('https://lolz.guru/online/?type=registered&page=1',headers=self.headers)
            print(page_count.text)

    <!doctype html><html><head><script src="/process-qv9ypsgmv9.js"></script></head><body><script>window.onload=function(){process();}</script><noscript><p>Please enable JavaScript and Cookies in your browser.</p></noscript></body></html>


    Пришлось вручную выколупывать куки из хрома, но вроде теперь работает, но один вопрос, какой класс ты ищешь? Вроде ты пытаешься найти класс в котором написано максимальное кол-во страниц и спарсить их все по очереди.

    Короче твой код работает, просто ты берешь не тот <a>, пробовал вручную словить, но так и не удалось. По быстрому будет селениумом. А для парсинга уже класс используй.
    А если я тебе предложу их просто спарсить в многопотоке.

    import requests
    from multiprocessing.dummy import Pool as ThreadPool 
    
    url = 'https://lolz.guru/online/?type=registered&page='
    # Не забудь хедеры и куки прикрутить, а то точно работать не будет
    urls = [url+str(i) for i in range(1,8)]# С первой по максимальную страницу
    print(urls)
    
    def get_url(url):
        r = requests.get(url)
        print(r.text)
    
    pool = ThreadPool(20) # Кол-во потоков - по числу ядер, но можно забить и больше, просто работать будет по кол-ву ядер
    results = pool.map(get_url, urls)
    pool.close() 
    pool.join()
    Ответ написан
  • Как сайт может отследить/определить что используется Selenium?

    @Alexa2007
    --disable-blink-features=AutomationControlled

    options.add_argument("--disable-blink-features=AutomationControlled")
    
    driver = webdriver.Chrome(
        executable_path="chromedriver",
        options=options
    Ответ написан
  • Как спарсить все артикулы со страницы с бесконечным скроллом на Beautifulsoup + Selenium?

    @Alexa2007
    #
    # Оооооочень удобно использовать jupyter notebook
    # 
    # Beautifulsoup я не использую
    #
    # Selenium тоже многое умеет
    # но это твой выбор
    #
    #
    
    def find_all_links():
        time.sleep(2)
        posts=[]
        links = driver.find_elements_by_tag_name('a')
        for link in links:
            post = link.get_attribute('href')
            if '/p/' in post:
                posts.append( post )
        
        return posts
    
    posts = []#Для хранения результата
    def scroll_end():#Перемотка до конца страницы
        lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
        match=False
        global posts
        while(match==False):
            lastCount = lenOfPage
            time.sleep(3)
            lenOfPage = driver.execute_script("window.scrollTo(0, document.body.scrollHeight);var lenOfPage=document.body.scrollHeight;return lenOfPage;")
            print(lenOfPage)
            if lastCount==lenOfPage:#Если доскролили до конца
                match=True
            psts = find_all_links()#Выполняю поиск того что мне надо
            posts += psts#Результат добавляю
            print(len(posts))#слежу за тем что происходит
    scroll_end()
    Ответ написан