爬取百度贴吧前1000页内容(requests库面向对象思想实现)
此程序以李毅吧为例子,以面向对象的设计思想实现爬取保存网页数据,暂时并未用到并发处理,以后有机会的话会加以改善
- 首先去百度贴吧分析贴吧地址栏中url后的参数,找到分页对应的参数pn,贴吧名字对应的参数kw
- 首先创建类,写好__init__方法,run方法,__init__方法里先可以直接写pass
- run方法里大概整理一下整体的思路
- 构造 url 列表,因为要爬取1000页,每页需对应一个url
- 遍历发送请求,获取响应
- 保存
- 将可封装的步骤封装到单独的方法,所以这里又增加了三个方法
- get_url_list方法可以返回需要访问的所有url的一个列表
- parse_url方法用来发送请求获取响应,最终返回html页面内容
- save_html方法用来保存html字符串
- run方法为核心实现,将三个方法和用到的参数结合起来
- 每当有用到的参数,可以在__init__方法里添加对应的实例属性
- 最后,实例化类,测试,会不断的向当前目录保存html文件
import requests class TiebaSpider(object):
def __init__(self, tieba_name): # tieba_name为要爬取贴吧的名称
self.tieba_name = tieba_name
self.url_temp = 'https://tieba.baidu.com/f?kw=' + tieba_name + '&ie=utf-8&pn={}'
self.headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
} def get_url_list(self): # 构造url列表
# url_list = []
# for i in range(1000):
# url_list.append(self.url_temp.format(i * 50))
# return url_list
return [self.url_temp.format(i*50) for i in range(1000)] # 列表推导式替换上面代码 def parse_url(self, url): # 发送请求,获取响应
print(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: # 样例: 李毅-第一页.html
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)
# 3.保存
page_num = url_list.index(url) + 1 # 页码数
self.save_html(html_str, page_num) if __name__ == '__main__':
tieba_spider = TiebaSpider('李毅')
tieba_spider.run()
爬取百度贴吧前1000页内容(requests库面向对象思想实现)的更多相关文章
- Python爬虫 - 爬取百度html代码前200行
Python爬虫 - 爬取百度html代码前200行 - 改进版, 增加了对字符串的.strip()处理 源代码如下: # 改进版, 增加了 .strip()方法的使用 # coding=utf-8 ...
- 正则爬取某段子网站前20页段子(request库)
首先还是谷歌浏览器抓包对该网站数据进行分析,结果如下: 该网站地址:http://www.budejie.com/text 该网站数据都是通过html页面进行展示,网站url默认为第一页,http:/ ...
- go语言,爬取百度贴吧指定贴所有内容
初级爬虫,为了学习一下常用的goquery. goquery 配置 go get https://github.com/PuerkitoBio/goquery 会提示不支持https方式 解决方案: ...
- python request爬取百度贴吧
import requests import os import shutil import time class PostBarSpider(object): def __init__(self, ...
- 【学习笔记】Python 3.6模拟输入并爬取百度前10页密切相关链接
[学习笔记]Python 3.6模拟输入并爬取百度前10页密切相关链接 问题描述 通过模拟网页,实现百度搜索关键词,然后获得网页中链接的文本,与准备的文本进行比较,如果有相似之处则代表相关链接. me ...
- Python——爬取百度百科关键词1000个相关网页
Python简单爬虫——爬取百度百科关键词1000个相关网页——标题和简介 网站爬虫由浅入深:慢慢来 分析: 链接的URL分析: 数据格式: 爬虫基本架构模型: 本爬虫架构: 源代码: # codin ...
- 利用python的爬虫技术爬取百度贴吧的帖子
在爬取糗事百科的段子后,我又在知乎上找了一个爬取百度贴吧帖子的实例,为了巩固提升已掌握的爬虫知识,于是我打算自己也做一个. 实现目标:1,爬取楼主所发的帖子 2,显示所爬去的楼层以及帖子题目 3,将爬 ...
- Python开发简单爬虫(二)---爬取百度百科页面数据
一.开发爬虫的步骤 1.确定目标抓取策略: 打开目标页面,通过右键审查元素确定网页的url格式.数据格式.和网页编码形式. ①先看url的格式, F12观察一下链接的形式;② 再看目标文本信息的标签格 ...
- 写一个python 爬虫爬取百度电影并存入mysql中
目标是利用python爬取百度搜索的电影 在类型 地区 年代各个标签下 电影的名字 评分 和图片连接 以及 电影连接 首先我们先在mysql中建表 create table liubo4( id in ...
随机推荐
- 卸载brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninst ...
- 「HEOI2014」大工程
问题分析 首先不难想到是虚树.建完虚树需要保持节点间原先的距离关系. 然后总距离和最小距离用树形DP求,最大距离用两遍dfs即可.注意统计的时候只对关键点进行统计. 真是麻烦 参考程序 ac的时候是l ...
- Mysql主从同步 异常Slave_SQL_Running: No
在刚搭建好的mysql主从节点上对从节点进行操作,导致同步异常:报错如下: 从节点执行: mysql> show slave status\G;************************* ...
- Centos 7.6 安装Mysql5.7(离线)
Centos 7.6 安装Mysql5.7(离线) 标签(空格分隔): mysql 安装包下载 https://dev.mysql.com/downloads/mysql/ [image.png-14 ...
- 构建 JVM(HotSpot) 源码调试环境(OpenJDK8)
原本想在 Windows 下编译调试,但过程中遇到了诸多错误(老是报路径错误...),最后只好放弃. 此次记录调试的方法为 CentOS7 上编译,Windows 上使用 Clion 远程调试(也可直 ...
- jdk git maven Jenkins的配置
前言 搭建Jenkins的笔记. JDK 1. jdk 下载地址 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-down ...
- n个骰子可能的点数和
让后面的点数比前面的大 package touzi; public class Touzi { public static void main(String[] args) { // TODO Aut ...
- javascript之for-in语句
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 非监督的降维算法--PCA
PCA是一种非监督学习算法,它能够在保留大多数有用信息的情况下,有效降低数据纬度. 它主要应用在以下三个方面: 1. 提升算法速度 2. 压缩数据,减小内存.硬盘空间的消耗 3. 图示化数据,将高纬数 ...
- 有效使用Django的QuerySets
对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQL要慢. 要有效的使用ORM,意味着需要多少要明白它是如何查询数据库的.本文我将重点介绍如何有效使用 Dja ...