【问题标题】:Web Scraping: Error handling with non existent values while scrapingWeb Scraping:在抓取时使用不存在的值处理错误
【发布时间】:2021-05-18 17:02:14
【问题描述】:
  • 下面的爬虫代码

    df = pd.DataFrame(columns=['Name', 'Address', 'Contact'])
    
    driver = webdriver.Chrome(ChromeDriverManager().install())
    url = 'www.website.com'
    driver.get(url)
    
    for _ in range(200):
        
        print('url, driver, window, driver.get INITIALIZED', 'DF created')
    
    
    
    
    
        name = driver.find_elements_by_class_name('pflist-itemtitle')
        address = driver.find_elements_by_class_name('pflist-address')
        contact = driver.find_elements_by_css_selector("a[href*='tel:']")
        print('variables to name, address, contact ASSIGNED')
    
    
        #Get names into a list
        name_list = []
        for a in range(len(name)):
            name_list.append(name[a].text)
            print('name scraped')
    
        address_list = []
        for b in range(len(address)):
            address_list.append(address[b].text)
            print('Address scraped')
    
        contact_list = []
        for c in range(len(contact)):
            contact_list.append(contact[c].text)
            print('Contact scraped')
    
    
        
        data_tuples = list(zip(name_list[0:], address_list[0:], contact_list[0:])) # everything is paired together
        temp_df = pd.DataFrame(data_tuples, columns=['Name', 'Address', 'Contact']) #creates temporary dataframe of each tuple in the field_listingtype
        df = df.append(temp_df)
        print('Data stored in dataframe')
    
    
        driver.find_element_by_tag_name('body').send_keys(Keys.END)
    
        element = driver.find_element_by_partial_link_text('Next »')
    
        print('Is the button enabled : ' + str(element.is_enabled()))
        print('Is the button visible : ' + str(element.is_displayed()))
    
        element.click()
        print('Next is clicked')
        print('Finished scraping')
        

需要抓取大约 200 页,格式相同。因此for循环。每个页面都有大约 70 张联系人卡片,包括姓名、地址、联系人。我让硒元素与这三个元素一起工作,我已经测试过了。当我测试两页时似乎还可以。现在,我让一切正常工作,一旦完成,它就成功地抓取了所有 200 页。我在网站上交叉引用了这些数字以及我在 DF 中得到的信息。显然,有些联系人卡片没有附加电话号码,python 将下一个可用号码附加到没有电话号码的联系人。因此,所有数字都没有移动,也不是为了正确接触。我怎样才能避免这种情况,通过某种“if”语句,当电话号码元素不可用时,它只是在电话号码列表中附加某种“不可用”字符串?

  • 另一个问题。我注意到它有时会完全错过刮掉一两个联系人。会不会是它没有及时完成,因为这次页面加载速度比其他时候快?提前致谢。

【问题讨论】:

  • 可以分享网址吗?也许beautifulsoup 的解决方案就足够了......

标签: python selenium web-scraping


【解决方案1】:

这是程序错误。看看你在做什么是把所有的名字和地址和电话号码一起保存在列表中等等,你假设名字将对应于各自位置的地址和电话号码,但想象一下如果像你这样缺少一个值, 通信会受到影响。

您需要做的是使用单个 for 循环来命名或寻址,即比命名更可取,因为缺少名称的可能性很小或根本没有。所以,循环到名称的长度。

name_List=[]
contact_List=[]
address_List=[]
i=0
while i<len(name):
    name_List.append(name[i].text)
    contac_List.append(contact[i].text)
    address_List.append(address[i].text)
    i=i+1

这将确保您的 name_List、contact_List 和 address_List 值彼此对应。因此,对于任何缺失值,您的列表将在该位置存储 null 或空字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多