• 利用 selenium 爬取糗事百科


    需要:

    最近看到了selenium介绍,说是可以模拟人类自动打开网页

    很有兴趣,于是学习了下,

    果然:兴趣是最好的老师。

    说明:

    选取糗事百科,因为没有设置爬虫robots,所以用来练手,

    请不要恶意爬取。

    代码如下:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    
    import time 
    from selenium import webdriver 
    from pymongo import MongoClient
    
    
    """
    1. 获取一个标签就是:element
    2. 获取多个标签就是:elements
    """
    
    
    """
    获取标签文本:text
    获取href属性值:get_attribute("href")
    """
    
    def get_db():
        client = MongoClient(host="localhost", port=27017)
        db = client.spider
        collection = db.qiushibaike_selenium
        return collection 
    
    
    def get_text():
        content_list = driver.find_elements_by_class_name("main-list") 
        # print(content_list)
        collection = get_db()
        for item in content_list:
            tm = item.find_element_by_class_name("fr").text
            title = item.find_element_by_class_name("title").text
            link = item.find_element_by_class_name("title").find_element_by_tag_name("a").get_attribute("href")
            text = item.find_element_by_class_name("content").text
            url = driver.current_url
            
            out_dict = {
                "发表时间": tm,
                "文章标题": title,
                "文章完整连接": link,
                "文章内容": text,
                "url": url
            }
            
            print("33[31m将该段子写入数据库中33[0m")
            collection.insert_one(out_dict)
            # print(out_dict)
        
    
    def get_next():
        print("33[32m开始进入下一页33[0m")
        
        try:
            next_page = driver.find_element_by_class_name("next")
            next_page.click()
            return True
        except Exception as e:
            print("这是最后一页啦")
            return False
        
        
    if __name__ == "__main__":
        driver =  webdriver.Firefox()
        driver.get("http://qiushidabaike.com/text_280.html") 
        get_text()
        time.sleep(2)
    
        while get_next():
            get_text()
            time.sleep(5)
        
        
        

    需要掌握的知识点:

    1. mongo数据库的登陆,数据插入,没有这方面基础的同学,可以将爬取到的结果存入到文本文件中;

    2.selenium如何定位元素,需要有一定的html,css基础,如果什么基础都没有,可以看下面的附属小tips;

    3.如何找到下一页,并进行爬取

    附属小tips:

    1.如何定位元素:

     在网页上面找到需要的元素,点击右键--检查元素--复制--Xpath即可,

    2. 爬取内容时,记得设置下休眠时间,减少网站压力,同时也减少由于网页渲染失败导致的错误

  • 相关阅读:
    让你一分钟认识电子身份验证系统EID
    jQuery滑动导航菜单
    sql语句中left join、 inner join的使用
    MySQL数据库分表的3种方法
    Apache 配置多端口 多虚拟主机 局域网访问
    8个开发必备的PHP功能(转)
    CentOS 6.4 图文安装教…
    mysql中char与varchar的区别分析
    PHP+jQuery+Ajax实现用户登录与退…
    隐藏/显示 我的电脑盘符驱动…
  • 原文地址:https://www.cnblogs.com/lmt921108/p/12941716.html
Copyright © 2020-2023  润新知