zoukankan      html  css  js  c++  java
  • 贴吧小爬虫之爬取源码

    在做爬虫工作之前,永远先做好笔记:

    确定要爬取的url,爬取的具体内容是什么,用什么形式展现爬取到的内容。

    博客的标题大家也看到了,爬取的是贴吧的源码,也就是说任何贴吧的源码都能爬。

    不光第一页还要爬,第二页第三页……都要爬。

    确定了上面的内容,那就可以开始代码的编写了。

    我最近在玩穿越火线,那就爬穿越火线吧:

    首先获取穿越火线贴吧的标准url:

    "https://tieba.baidu.com/f?kw=穿越火线"
    分析页码不同时url的区别:
    第一页:"https://tieba.baidu.com/f?kw=穿越火线&ie=utf-8&pn=0"
    第二页:"https://tieba.baidu.com/f?kw=穿越火线&ie=utf-8&pn=50"
    第三页:"https://tieba.baidu.com/f?kw=穿越火线&ie=utf-8&pn=100"
    对比分析,我们可以知道pn的值等于(页码-1)*50。
    那么收集headers信息,就可以开始了:
    import requests
     
    class TiebaSpider:
        def __init__(self,tieba_name):        #实现能够爬取任意贴吧的功能,所以贴吧的名字需要做一个变量出来。
            self.tieba_name=tieba_name
            self.url="https://tieba.baidu.com/f?kw="+tieba_name+"&ie=utf-8&pn={}"
            self.headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26
    Safari/537.36 Core/1.63.6814.400QQBrowser/10.3.3005.400"}


        def get_url_list(self):#构造url列表
            url_list=[]
            for i in range(3):  #能够爬取三页,i是0,1,2。
                url_list.append(self.url.format(i*50))
            return url_list

        def parse_url(self,url):#发送请求,获取响应
            response=requests.get(url,headers=self.headers)
            return response.content.decode()  #显示源码

        def save_html(self,html_str,page_num):#保存html字符串到文件
            file_path="{}-第{}页.html".format(self.tieba_name,page_num)
            with open(file_path,"w",encoding="utf-8") as f:  #创建文件。指定unicode编码为utf-8,很关键的一步。
            f.write(html_str)


        def run(self):#实现主要逻辑
        #1.构造url列表
            url_list=self.get_url_list()
        #2.遍历,发送请求,获取相应
            for url in url_list:
                html_str=self.parse_url(url)  #把源码存储到html_str变量之中。
        #3.保存html字符串
                page_num=url_list.index(url)+1     #用index检查是否存在url,并报出索引位置,是从0开始的。
                self.save_html(html_str,page_num)
                print(url,"爬取成功!")


    if __name__=="__main__":
        tieba_spider=TiebaSpider("穿越火线")      #建立一个穿越火线吧的实例,这样做可以爬任意的贴吧。
        tieba_spider.run() 
     
    敲爬虫代码的时候,思绪一定要清晰,先打好run()的主要功能,再去一一分别实现出来
  • 相关阅读:
    查询数据库锁的SQL
    注解学习实例(模拟hibernate,table,column注解,拼装SQL)
    mongoDB学习笔记
    拼装SQL.例子
    MySQL实现类似Oracle序列的函数
    面试总结
    linux下常用命令
    PHP 中 flush() 与 ob_flush() 的区别
    PHP 使用共享内存的资料
    移动设备的web站开发和将web封转成移动端应用的一些资料
  • 原文地址:https://www.cnblogs.com/Masterpaopao/p/10246296.html
Copyright © 2011-2022 走看看