首页 > 其他分享 >【爬虫】爬虫简单举例(三种写法) 涉及requests、urllib、bs4,re

【爬虫】爬虫简单举例(三种写法) 涉及requests、urllib、bs4,re

时间:2022-09-21 19:55:09浏览次数:52  
标签:csv bs4 request list 爬虫 re result CSV

目录

写法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)

标签:csv,bs4,request,list,爬虫,re,result,CSV
From: https://www.cnblogs.com/mllt/p/code-r-python-spider.html

相关文章

  • React 路由5
    大家好,又见面了,我是你们的朋友全栈君。ReactReact路由对SPA的理解1.单页Web应用(singlepagewebapplication,SPA)。2.整个应用只有一个完整的页面。3.点击页面......
  • Redis
    主从的架构:一主多从,级联 主从复制1.s初次链接到m,发送sync命令,会触发一次全量复制。2.m新开后台线程,生成一份RDB快照,同时将客户端发来的写命令,缓存在内存中3.RDB生成......
  • 使用Navicat Premium 和PL\SQL Developer连接Oracle
    在64位Win7中使用NavicatPremium和PL\SQLDeveloper连接Oracle数据库备忘 服务器端数据库是oracle11g64位。由于主要工作不是开发,也不想在自己的电脑上安装庞大的orac......
  • Redis——数据操作(2)
    2022-09-21(2)hash操作:①设置多个hash值,(hmset):查看说明:helphmset hmsetpersonnameAage1 ②获得多个hash值,(hmget):查看说明:helphmget ......
  • angular入门---Store页面
    Angular入门篇2预期效果:新项目配置1.首先使用"ngnewStore"指令在Angular文件夹下创建一个新项目。下面利用vscode打开项目进行操作(部分插件已安装)。2.找到pac......
  • The ways to express gratitude in English All In One
    ThewaystoexpressgratitudeinEnglishAllInOne用英语表达感激的方法汇总Thanks/Thanksalot✅初级用法Thanksforyourtime✅高级用法https://www.......
  • CentOS 7.x 安装redis-5.0.14
    准备篇一、防火墙配置CentOS7.x默认使用的是firewall作为防火墙,这里改为iptables防火墙。1、关闭firewall:systemctlstopfirewalld.service#停止firewallsystemctl......
  • react-antd组件之Steps组件自定义icon svg图片颜色跟随完成进度改变
    demo.svg<?xmlversion="1.0"encoding="UTF-8"?><svgwidth="58px"height="44px"viewBox="005844"version="1.1"xmlns="http://www.w3.org/2000/svg"xmlns:xli......
  • Redis 安装与使用
    Redis安装与使用Redis介绍Redis是由SalvatoreSanfilippo写的key-value存储系统,是一个跨平台的非关系型数据库(NoSQL)。Redis是用C语言开发完全开源,基于内存的高......
  • 使用ThreadPool.SetMinThreads方法提升API服务响应性能的总结
    关于使用ThreadPool.SetMinThreads方法提升API服务响应性能的总结使用该方法的背景?某个API服务在每日请求量40W的情况下,流量增多时会产生大量请求异常:Theoperationwas......