zoukankan      html  css  js  c++  java
  • python爬虫(五)

    爬虫的一个具体事例讲解
    import requests
    from lxml import etree
    import json

    class QiubaiSpyder:
    def init(self):
    self.url_temp = "https://www.qiushibaike.com/8hr/page/{}/"
    self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"}

    def get_url_list(self):  # 1
        url_list = [self.url_temp.format(i) for i in range(1, 14)]
        return url_list
    
    def parse_url(self, url):  # 2.
        print("url = ", url)
        response = requests.get(url, headers= self.headers)
        return response.content.decode()
    
    def get_content_list(self, html_str):  # 3.
        html = etree.HTML(html_str)
        # 1.分组
        div_list = html.xpath("//div[@id='content-left']/div")
        content_list = []
        for div in div_list:
            item = {}
            # .strip()使“
    ”去掉
            item["Author"]=div.xpath(".//h2/text()")[0].strip() if              len(div.xpath(".//h2/text()")) > 0 else None
            item["content"] = div.xpath(".//div[@class= 'content']/span/text()")
            item["content"] = [i.strip() for i in item["content"]]
            item["thumb"] = div.xpath(".//div[@class= 'thumb']/img/@src")
         item["states_vote"]=div.xpath(".//span[@class='statesvote']/i/text()")
            item["states_vote"]=item["states_vote"][0] if len(item["states_vote"]) > 0 else None
            item["comment_numbers"]=div.xpath(".//span[@class= 'states-comments']//i/text()")
            item["comment_numbers"] = item["comment_numbers"] if len(item["comment_numbers"]) > 0 else None
            content_list.append(item)
        return content_list
    
    def save_content_list(self, content_list):
        with open("qiubai.txt", "a", encoding= 'utf-8') as f:
            for content in content_list:
                f.write(json.dumps(content, ensure_ascii=False))  # 转换成json字符串才能写入字典当中
                f.write("
    ")
            print("保存成功")
    
    def run(self): # 实现主要逻辑
        # 1.根据url地址规律,构造url list
        url_list = self.get_url_list()
    
        # 2.发送请求,获取响应
        for url in url_list:
            html_str = self.parse_url(url)
            # 3.提取数据
            content_list = self.get_content_list(html_str)
            # 4.保存数据
            self.save_content_list(content_list)
    

    if name == 'main':
    qiubai = QiubaiSpyder()
    qiubai.run()

    这是写的一个简单的爬取糗事百科的程序,非常简单,复制粘贴即可使用,属于一个爬虫的基本框架,还可以进一步修改。

    这个就是爬取的数据,以字典的形式展示出来。
    一个爬虫的基本流程就是:
    1.url
    --知道你所要爬取的网站url地址,或url地址的规律和页数,构造url地址列表
    --开始创建start_url列表
    2.发送请求,获取响应
    --requests发送请求,get响应
    3.提取数据
    --返回json,使用json模块
    --返回html,lxml模块,并使用xpath提取数据
    --返回其他,如图片,可以直接保存为jpg或png文件
    4.保存数据
    --可以按列表的形式保存为.csv文件
    --或者直接保存为.txt文件
    后面的3,4步可以在响应中进行,也可单独进行。
    主程序为run()函数,在该函数下进行细分为四个子函数,每个子函数完成一个功能。
    def get_content_list(self, html_str)函数,使用了之前讲解过的lxml模块,这个模块用于从html中提取数据。

  • 相关阅读:
    Google提出的新型激活函数:Swish
    Rosonblatt线性感知器
    Rosonblatt线性感知器
    毕业的到来
    陌生人
    学会感恩
    session和el表达式
    cooking和session
    不離不棄
    生活
  • 原文地址:https://www.cnblogs.com/joytribianni/p/10304404.html
Copyright © 2011-2022 走看看