补充。我在发了这篇文章之后,后面又要爬这个论坛。然后我发现我没有认真观察那个网页的源码,所以爬的不全。大意了。

不过问题也不大,看这个文章主要也是看个方法,仅供参考,仅供参考。

写法1:requests + re

# -*- coding: UTF-8 -*-
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/9/21
# 写法1:requests + re
import requests
import re
import csv
# 准备URL
url="http://bbs.tianya.cn/list-666-1.shtml"
# 获取页面源码
code_request = requests.get(url).content.decode("utf-8")
# 预设列表存放结果
result_list=[]
# 使用正则表达式获取响应内容
result_author = re.findall('.*?"author".*?>(.*?)</a></td>',code_request,re.S)
result_time = re.findall('<td title="(.*?)">',code_request,re.S)
# 循环输出结果
for i in range(len(result_time)): # 注意,你也可以写result_author
# 设置字典数据
result_dic = {"作者": result_author[i], "回复时间": result_time[i]}
# 将词典数据放入列表
result_list.append(result_dic)
print(result_list) # 此时的列表是由多个字典元素组成的列表
# 开始写出CSV文件
with open("result.csv","a+",encoding="utf-8") as f:
# 准备CSV表头
writer = csv.DictWriter(f,fieldnames=['作者','回复时间'])
# 写CSV表头
writer.writeheader()
# 写CSV数据
writer.writerows(result_list)
# 读取CSV
with open("result.csv",encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)

写法2:urllib + re

# -*- coding: UTF-8 -*-
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/9/21
# 写法2:urllib + re
import re
from urllib import request
import csv import urllib3
url="http://bbs.tianya.cn/list-666-1.shtml"
code_request = request.urlopen(url=url)
code_request=code_request.read().decode("utf-8")
# 预设列表存放结果
result_list=[]
# 使用正则表达式获取响应内容
result_author = re.findall('.*?"author".*?>(.*?)</a></td>',code_request,re.S)
result_time = re.findall('<td title="(.*?)">',code_request,re.S)
# 循环输出结果
for i in range(len(result_time)): # 注意,你也可以写result_author
# 设置字典数据
result_dic = {"作者": result_author[i], "回复时间": result_time[i]}
# 将词典数据放入列表
result_list.append(result_dic)
print(result_list) # 此时的列表是由多个字典元素组成的列表
# 开始写出CSV文件
with open("result.csv","a+",encoding="utf-8") as f:
# 准备CSV表头
writer = csv.DictWriter(f,fieldnames=['作者','回复时间'])
# 写CSV表头
writer.writeheader()
# 写CSV数据
writer.writerows(result_list)
# 读取CSV
with open("result.csv",encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)

方法3:request + bs4

# -*- coding: UTF-8 -*-
# 开发人员:萌狼蓝天
# 博客:Https://mllt.cc
# 笔记:Https://cnblogs.com/mllt
# 哔哩哔哩/微信公众号:萌狼蓝天
# 开发时间:2022/9/21
# 写法3:requests + bs4
from bs4 import BeautifulSoup
import requests
import csv # 准备URL
url = "http://bbs.tianya.cn/list-666-1.shtml"
# 获取页面源码
code_request = requests.get(url).content.decode("utf-8")
# 转为Soup对象
soup = BeautifulSoup(code_request, "lxml")
# 获取 带有bg样式的标签tr 的源码
code_list = soup.findAll("tr", attrs={"class": "bg"})
# 预设列表存放结果
result_list = []
for i in code_list:
# 准备空字典以存放所需数据
result_dic = {}
# 使用正则表达式获取响应内容 | .replace("\n","")删除换行符 .lstrip()和.rstrip()删除文本左、右空白
result_title = i.findAll("td", attrs={"class": "td-title"})[0].findAll("a")[0].text.replace("\n","").lstrip().rstrip()
result_author = i.find_all("a", attrs={"class": "author"})[0].text.replace("\n", "").lstrip().rstrip()
result_time = i.find_all("td")[-1].text.replace("\n", "").lstrip().rstrip()
# print("---------测试----------")
# print(result_title,result_author,result_time)
# print("---------测试----------")
result_dic["标题"] = result_title
result_dic["作者"] = result_author
result_dic["回复时间"] = result_time
# 将词典数据放入列表
result_list.append(result_dic)
# print(result_list) # 此时的列表是由多个字典元素组成的列表
# 开始写出CSV文件
with open("resultb.csv", "a+", encoding="utf-8") as f:
# 准备CSV表头
writer = csv.DictWriter(f, fieldnames=["标题",'作者', '回复时间'])
# 写CSV表头
writer.writeheader()
# 写CSV数据
writer.writerows(result_list)
# 读取CSV
with open("resultb.csv", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(row)

【爬虫】爬虫简单举例(三种写法) 涉及requests、urllib、bs4,re的更多相关文章

  1. 总结 React 组件的三种写法 及最佳实践 [涨经验]

    React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...

  2. 爬虫入门系列(三):用 requests 构建知乎 API

    爬虫入门系列目录: 爬虫入门系列(一):快速理解HTTP协议 爬虫入门系列(二):优雅的HTTP库requests 爬虫入门系列(三):用 requests 构建知乎 API 在爬虫系列文章 优雅的H ...

  3. insert into 语句的三种写法

    insert into 语句的三种写法 方式1. INSERT INTO t1(field1,field2) VALUES (v001,v002);            // 明确只插入一条Valu ...

  4. setInterval()的三种写法

    前言: setInterval("fun()",time)有两个参数:fun()为要执行的函数:time为多久执行一次函数,单位是毫秒: 我们做一个简单的例子,就是每隔5s弹出一个 ...

  5. 总结 React 组件的三种写法 及最佳实践

    React 专注于 view 层,组件化则是 React 的基础,也是其核心理念之一,一个完整的应用将由一个个独立的组件拼装而成. 截至目前 React 已经更新到 v15.4.2,由于 ES6 的普 ...

  6. 链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别

    链接属性rel='external'.rel='nofollow'.rel='external nofollow'三种写法的区别   大家应该都知道rel='nofllow'的作用,它是告诉搜索引擎, ...

  7. jquery 在页面中三种写法

    jQuery 分 2 个系列版本 1.x 与 2.x,主要的区别在于 2.x 不再兼容 IE6.7.8浏览器,这样做的目的是为了兼容移动端开发.由于减少了一些代码,使得该版本比 jQuery 1.x ...

  8. HTML颜色的三种写法

    颜色的三种写法: 1.16进制代码     #000000 2.英文字母         red 3.rgba                rgba(0-255,0,0,0-1) 例如: <b ...

  9. (转)Ext.Button点击事件的三种写法

    转自:http://maidini.blog.163.com/blog/static/377627042008111061844345/ ExtJs的写法太灵活了,现在收集了关于Button点击事件的 ...

  10. 16_点击事件第三种写法_activity实现接口

    第一种写法是有名内部类,第二种写法是匿名内部类,第三种写法是MainActivity实现接口OnClickListener.直接让MainActivity实现了OnClickListener这个接口. ...

随机推荐

  1. USB总线-Linux内核USB3.0 Hub驱动分析(十四)

    1.概述 USB Hub提供了连接USB主机和USB设备的电气接口.USB Hub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为Root Hub,下行口连 ...

  2. 云原生周刊 | 使用 kube-reqsizer 自动调整资源配额

    开源项目推荐 kptop Kubernetes API 提供的监控指标非常有限,而 kubectl top 就是利用 Kubernetes API 来查看 Node 和 Pod 的实时资源使用情况.k ...

  3. RAC环境中某数据文件(非system表空间)创建在本地,不停机迁移到ASM磁盘中

    Datafiles are mistakenly built into the local file system for processing in the RAC environment The ...

  4. vue 强制刷新

    页面传的数值动态改变,接口接受的参数也就动态更改,但接收的数据有时候不会及时改变,通过this.$forceUpdate()页面强制刷新来解决这个问题.

  5. 分布式应用架构的发展演变RPC

    什么是分布式系统? <分布式系统原理与范型>定义: "分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统",分布式系统(distributed s ...

  6. NES 系统架构

    主机 NES(FC.红白机.小霸王)的系统架构可用下图表示: 系统中最核心的组件是 CPU,其它组件都可以算作 CPU 的外设.CPU 的外设包括:PPU(图像处理器).APU(音频处理器).WRAM ...

  7. Python实现摇号系统

    1.引言 摇号系统在现代社会中有广泛的应用,特别是在车牌摇号.房屋摇号等公共资源分配领域.摇号系统的主要目的是通过随机分配的方式,确保资源的公平.公正分配.本文将详细介绍如何使用Python实现一个简 ...

  8. Canvas简历编辑器-层级渲染与事件管理能力设计

    Canvas简历编辑器-选中绘制与拖拽多选交互设计 在之前我们聊了聊如何基于Canvas与基本事件组合实现了轻量级DOM,并且在此基础上实现了如何进行管理事件以及多层级渲染的能力设计.那么此时我们就依 ...

  9. 2.14 Linux文件目录结构一览表

    学习 Linux,不仅限于学习各种命令,了解整个 Linux 文件系统的目录结构以及各个目录的功能同样至关重要. 使用 Linux 时,通过命令行输入 ls -l / 可以看到,在 Linux 根目录 ...

  10. 只有ip地址没有域名怎么申请https证书

    ​只有IP地址没有域名,如何申请HTTPS证书? 在日常生活中,我们通常会为网站的域名申请HTTPS证书,以保护用户的数据安全.然而,有时候你可能需要为一个只有IP地址的服务或设备申请HTTPS证书. ...