zoukankan      html  css  js  c++  java
  • 使用串行爬虫爬豆瓣电影top 250

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time : 2021/9/5 21:41
    # @Author : Lhtester
    # @Site : 
    # @File : 豆瓣电影.py
    # @Software: PyCharm
    """使用串行爬虫爬豆瓣电影top 250"""
    #导入模块
    import requests
    import time
    import random
    from lxml import etree
    from queue import Queue
    
    class DouBanSpider:
        """爬虫类"""
        def __init__(self):
            self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"}
            self.base_url = "https://movie.douban.com/top250"
            #声明队列
            self.dataQueue = Queue()
            self.num = 1
    
        def loadPage(self,url):
    
            '''向URL发起请求,获取响应内容'''
            #设置随机休眠
            time.sleep(random.random())
            return requests.get(url,headers=self.headers).content
        def parsePage(self,url):
            '''根据起始URL提取所有的URL'''
    
            #获取URL对应的响应内容
            content = self.loadPage(url)
            #Xpath 处理得到的对应element对象
            html = etree.HTML(content)
            #所有的电影节点
            node_list = html.xpath("//div[@class='info']")
    
            #遍历
            for node in node_list:
                #获取每部电影标题
                title = node.xpath(".//span[@class='title']/text()")[0]
                #每部电影的评分
                score = node.xpath(".//span[@class='rating_num']/text()")[0]
                #将数据存储到队列中
                self.dataQueue.put(score+"	"+title)
            #只有在第一个时获取所有URL组成的列表,其他页就不再获取
            if url == self.base_url:
                return [self.base_url + link for link in html.xpath("//div[@class='paginator']/a/@href")]
    
        def startWork(self):
            """爬虫入口"""
            #第一个页面的请求,需要返回所有页面链接,并提取第一个的电影信息
            link_list = self.parsePage(self.base_url)
            #循环发送每个页面的请求,并获取所有的电影信息
            for link in link_list:
                self.parsePage(link)
            #循环get队列的数据,直到队列为空在退出
            while not self.dataQueue.empty():
                print(self.num)
                print(self.dataQueue.get())
                self.num+=1
    
    if __name__ == "__main__":
    
        #创建爬虫对象
        spider =DouBanSpider()
        #开始时间
        start_time = time.time()
        #开始爬虫
        spider.startWork()#!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # @Time : 2021/9/5 21:41
    # @Author : Lhtester
    # @Site : 
    # @File : 豆瓣电影.py
    # @Software: PyCharm
    """使用串行爬虫爬豆瓣电影top 250"""
    #导入模块
    import requests
    import time
    import random
    from lxml import etree
    from queue import Queue
    
    class DouBanSpider:
        """爬虫类"""
        def __init__(self):
            self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"}
            self.base_url = "https://movie.douban.com/top250"
            #声明队列
            self.dataQueue = Queue()
            self.num = 1
    
        def loadPage(self,url):
    
            '''向URL发起请求,获取响应内容'''
            #设置随机休眠
            time.sleep(random.random())
            return requests.get(url,headers=self.headers).content
        def parsePage(self,url):
            '''根据起始URL提取所有的URL'''
    
            #获取URL对应的响应内容
            content = self.loadPage(url)
            #Xpath 处理得到的对应element对象
            html = etree.HTML(content)
            #所有的电影节点
            node_list = html.xpath("//div[@class='info']")
    
            #遍历
            for node in node_list:
                #获取每部电影标题
                title = node.xpath(".//span[@class='title']/text()")[0]
                #每部电影的评分
                score = node.xpath(".//span[@class='rating_num']/text()")[0]
                #将数据存储到队列中
                self.dataQueue.put(score+"	"+title)
            #只有在第一个时获取所有URL组成的列表,其他页就不再获取
            if url == self.base_url:
                return [self.base_url + link for link in html.xpath("//div[@class='paginator']/a/@href")]
    
        def startWork(self):
            """爬虫入口"""
            #第一个页面的请求,需要返回所有页面链接,并提取第一个的电影信息
            link_list = self.parsePage(self.base_url)
            #循环发送每个页面的请求,并获取所有的电影信息
            for link in link_list:
                self.parsePage(link)
            #循环get队列的数据,直到队列为空在退出
            while not self.dataQueue.empty():
                print(self.num)
                print(self.dataQueue.get())
                self.num+=1
    
    if __name__ == "__main__":
    
        #创建爬虫对象
        spider =DouBanSpider()
        #开始时间
        start_time = time.time()
        #开始爬虫
        spider.startWork()
        #结束时间
        stop_time = time.time()
        #result
        print("
    [LOG]:%f secondes..."%(stop_time-start_time))
    
    
    
    
    
    
    
    
    
    
    
    
        #结束时间
        stop_time = time.time()
        #result
        print("
    [LOG]:%f secondes..."%(stop_time-start_time))
  • 相关阅读:
    Codeforces Round #564 (Div. 1)
    Codeforces Round #569 (Div. 1)
    SDOI2019R2游记
    BZOJ 3555: [Ctsc2014]企鹅QQ
    SDOI2019R1游记
    计数的一些东西
    多项式的各种操作
    BZOJ 5424: 烧桥计划
    Codeforces Round #545 (Div. 1)
    概率期望学习笔记
  • 原文地址:https://www.cnblogs.com/anhao-world/p/15231506.html
Copyright © 2011-2022 走看看