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

补充。我在发了这篇文章之后,后面又要爬这个论坛。然后我发现我没有认真观察那个网页的源码,所以爬的不全。大意了。
不过问题也不大,看这个文章主要也是看个方法,仅供参考,仅供参考。

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

posted @ 2022-09-21 19:50  萌狼蓝天  阅读(131)  评论(0编辑  收藏  举报