当前位置: 首页 > news >正文

零基础Python爬虫实现(百度贴吧)

提示:本学习来自Ehco前辈的文章, 经过实现得出的笔记。

目标

http://tieba.baidu.com/f?kw=linux&ie=utf-8

网站结构

学习目标

由于是第一个实验性质爬虫,我们要做的不多,我们需要做的就是:

1. 从网上爬下特定页码的网页
2. 对于爬下的页面内容进行简单的筛选分析
3. 找到每一篇帖子的 标题、发帖人、日期、楼层、以及跳转链接
4. 将结果保存到文本。

 发现规律

&pn=0 : 首页
&pn=50: 第二页
&pn=100:第三页
&pn=50*n 第n页
50 表示 每一页都有50篇帖子。
这样就能实现翻页操作

 附上代码

import requests
import time

from bs4 import BeautifulSoup

def get_html(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()

        r.encoding = 'utf-8'
        return r.text
    except:
        return "error"

def get_content(url):
    comments = []
    html = get_html(url)

    soup = BeautifulSoup(html, 'lxml')
    liTags = soup.find_all('li', attrs={'class':' j_thread_list clearfix'})

    for li in liTags:
        comment = {}
        try:
            #标题
            comment['title'] = li.find(
                'a', attrs={'class':'j_th_tit '}).text.strip()
            #链接
            comment['link'] = "http://tieba.baidu.com/" + \
                li.find('a', attrs={'class' : 'j_th_tit'})['href']
            #发帖人
            comment['name'] = li.find(
                'span', attrs = {'class':'tb_icon_author '}
            ).text.strip()
            #发帖时间
            comment['time'] = li.find(
                'span', attrs={'class':'pull-right is_show_create_time'}
            ).text.strip()
            #回复数量
            comment['replyNum'] = li.find(
                'span', attrs={'class':'threadlist_rep_num center_text'}
            ).text.strip()
            comments.append(comment)
        except:
            print("出了点小问题")
    return comments

def Out2File(dict):
    with open('TTBT.txt', 'a+') as f:
        for comment in dict:
            f.write('标题: {} \t 连接: {} \t 发帖人: {} \t 发帖时间: {} \t 回复数量: {} \n'.format(
                comment['title'], comment['link'], comment['name'], comment['time'], comment['replyNum']
            ))
        print("当前页面爬取完成")

def main(base_url, deep):
    url_list = []
    for i in range(0, deep):
        url_list.append(base_url + '&pn' + str(50 * i))
    print("所有的网页已经下载到本地! 开始筛选信息")

    for url in url_list:
        content = get_content(url)
        Out2File(content)
    print("所有的信息都已经保存完毕")

base_url = 'http://tieba.baidu.com/f?kw=linux&ie=utf-8'
deep = 3

if __name__ == '__main__':
    main(base_url, deep)

结果

 

转载于:https://www.cnblogs.com/chenglee/p/8473989.html

相关文章:

  • 我对CopyOnWrite的思考
  • RabbitMQ入门-路由-有选择的接受消息
  • 报告称国产智能手机全球市场份额33.1% 超过韩国
  • iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge
  • 深入理解java虚拟机 精华总结(面试)
  • Spring框架
  • DTS-071007 表结构在源库和目标库中不一致
  • 算法学习之路|聪明的打字员
  • [学习笔记—Objective-C]《Objective-C-基础教程 第2版》第二章~第七章
  • MongoDB入门(二)——MongoDB下载与安装
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • centos7设置静态IP
  • 64位x86的函数调用栈布局
  • 纯文本配置还是注册表
  • “你的优势是什么?
  • 网络传输文件的问题
  • SegmentFault for Android 3.0 发布
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 0基础学习移动端适配
  • echarts花样作死的坑
  • express如何解决request entity too large问题
  • Flex布局到底解决了什么问题
  • happypack两次报错的问题
  • python3 使用 asyncio 代替线程
  • Python学习之路13-记分
  • 关于extract.autodesk.io的一些说明
  • 后端_ThinkPHP5
  • 排序算法学习笔记
  • 七牛云假注销小指南
  • 前端知识点整理(待续)
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 实现菜单下拉伸展折叠效果demo
  • 用简单代码看卷积组块发展
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.ajax()方法详解
  • (02)Hive SQL编译成MapReduce任务的过程
  • (3)llvm ir转换过程
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (solr系列:一)使用tomcat部署solr服务
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (附源码)计算机毕业设计高校学生选课系统
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (四)Linux Shell编程——输入输出重定向
  • ***原理与防范
  • ./configure,make,make install的作用(转)
  • .apk文件,IIS不支持下载解决
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .gitignore文件—git忽略文件
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net mvc部分视图
  • .net图片验证码生成、点击刷新及验证输入是否正确