利用 selenium 爬取糗事百科

Posted lmt921108

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用 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. 爬取内容时,记得设置下休眠时间,减少网站压力,同时也减少由于网页渲染失败导致的错误

以上是关于利用 selenium 爬取糗事百科的主要内容,如果未能解决你的问题,请参考以下文章

利用python爬取糗事百科的用户及段子

爬虫二:爬取糗事百科段子

多线程爬取糗事百科热门段子 (改写前天的博客)

爬虫实战 爬取糗事百科

使用Python爬取糗事百科热门文章

爬取糗事百科的图片