【问题标题】:Problem. python scrape with requests + selenium问题。 python抓取请求+硒
【发布时间】:2021-10-28 15:54:29
【问题描述】:

CODE IS HERE

大家好

我在抓取这个动态网站时遇到了一些问题 (https://kvartiry-bolgarii.ru/) 我需要获取房屋销售广告的所有链接

我使用 selenium 加载页面并获取指向广告的链接,然后我将页面向下移动以加载新广告。加载新广告后,我开始解析页面上的所有链接并将它们再次写入列表。 但是列表中的数据没有更新,脚本继续使用向下滚动之前页面上的链接。

顺便说一句,我设置了一个检查,以便执行脚本,直到网站上的最后一个公告出现在列表中,我提前发现的链接

如何解决这个问题?

def get_link_info():

    try:
        url = "https://kvartiry-bolgarii.ru/"
        driver = webdriver.Chrome(
            executable_path=r'C:\Users\kk\Desktop\scrape_house\drivers\chromedriver.exe',
            options=options
        )

        driver.get(url)

        req = requests.get(url)
        req.encoding = 'utf8'
        soup = BeautifulSoup(req.text, "lxml")
        articles = soup.find_all("div", class_="content")

        links_urls = []
        for article in articles:
            house_url = article.find("a").get("href")
            links_urls.append(house_url)
            #print(links_urls)

        first_link_number = links_urls[-2].split("-")[-1]
        first_link_number = first_link_number[1:]
        #print(first_link_number)

        last_link_number = links_urls[-1].split("-")[-1]
        last_link_number = last_link_number[1:]
        #print(last_link_number)

        html = driver.find_element_by_tag_name('html')
        html.send_keys(Keys.END)
        check = "https://kvartiry-bolgarii.ru/kvartira-v-elitnom-komplekse-s-unikalynym-sadom-o21751"

        for a in links_urls:
            if a != check:

                for article in articles:
                    house_url = article.find("a").get("href")
                    links_urls.append(house_url)

                html = driver.find_element_by_tag_name('html')
                html.send_keys(Keys.END)
                print(links_urls[-1])


            else:
                print(links_urls[0], links_urls[-1])
                print("all links are ready")

【问题讨论】:

  • @Дмитрий 你有一个答案。如果它有效或无效,请留下一些反馈。这就是这个网站的运作方式。你问,人们回答你,你接受/赞成答案。你留下一些cmets以防出错。
  • 请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example。

标签: python selenium python-requests


【解决方案1】:

一些指针。您无需混合使用 selenium,requests 和 BeautifulSoup。只需selenium 就足够了。当您无限滚动时,您需要先删除重复的元素,然后再将它们添加到您的列表中。 你可以试试这个。这应该可以。

from selenium import webdriver
import time

def get_link_info():
    all_links = []
    try:
        driver = webdriver.Chrome(executable_path='C:/chromedriver.exe')
        driver.get('https://kvartiry-bolgarii.ru/')
        time.sleep(3)
        old_links = set()  # Empty Set
        while True:
            # Scroll to get more ads
            driver.execute_script("window.scrollBy(0,3825)", "")
            # Wait for new ads to load
            time.sleep(8)
            links_divs = driver.find_elements_by_xpath('//div[@class="content"]//a')  # Find Elements
            ans = set(links_divs) - set(old_links)  # Remove old elements
            for link in ans:
                # Scroll to the link. 
                driver.execute_script("arguments[0].scrollIntoView();", link)
                fir = link.get_attribute('href')
                all_links.append(fir)
            # Remove Duplicates
            old_links = links_divs
    except Exception as e:
        raise e

get_link_info()

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    相关资源
    最近更新 更多