爬虫学习(bs4)

一、CSV文件操作

        csv文件 → 逗号分隔值文件

1、reader的用法

        (1)打开需要读的csv文件

        (2)创建文件对象的reader获取文件内容,返回值一个生成器,生成其中的元素就是文件中每一行内容对应的列表

from csv import reader,DictReader
# 打开需要读的csv文件
f= open('电影.csv',encoding='utf-8')
# 创建文件对象的reader获取文件内容,返回值一个生成器,生成其中的元素就是文件中每一行内容对应的列表
r1 = reader(f)
print(list(r1))
# 读完数据后关闭文件
f.close()
2、DictReader的用法 → 每一行数据对应一个字典,键是第一行内容

        (1)打开需要度的csv文件

        (2)创建文件对象的DictReader对象获取文件内容,返回值一个生成器,生成其中的元素是从第二行开始的每一行内容的字典

from csv import reader,DictReader
# 打开需要读的csv文件
f= open('电影.csv',encoding='utf-8')
# 创建文件对象的DictReader对象获取文件内容,返回值一个生成器,生成其中的元素是从第二行开始的每一行内容的字典
r2 = DictReader(f)
print(next(r2))
print(dict(r2))
# 读完数据后关闭文件
f.close()
3、writer的用法

        (1)以写的方式打开

        (2)创建writer对象

        (3)写入数据

                      a.一次写一行内容,一行内容对应一个列表

                      b.同时写入多行内容,需要一个大的列表,列表中的元素是每一行内容对应的小列表

        (4)写完后关闭文件

from csv import writer, DictWriter
# 以写的方式打开
f = open('students.csv', 'w', encoding='utf-8',newline='')
# 创建writer对象
w1 = writer(f)
# 一次写一行内容,一行内容对应一个列表
w1.writerow(['姓名', '年龄', '电话', '分数'])
# 同时写入多行内容,需要一个大的列表,列表中的元素是每一行内容对应的小列表
w1.writerows([
    ['小明', 18, '110', 90],
    ['小花', 19, '120', 80]
])
# 写完后关闭文件
f.close()
4、DictWriter的用法

        (1)以写的方式打开

        (2)创建DictWriter对象

        (3)写入数据

                        a.将字段写入到第一行中

                        b.一次写一行内容,一行内容对应一个字典

                        c.同时写入多行内容

        (4)写完后关闭文件

# 以写的方式打开
f = open('students.csv', 'w', encoding='utf-8',newline='')
# 创建DictWriter对象
w2 = DictWriter(f, ['姓名', '年龄', '电话', '分数'])
# 写入数据
# a.将字段写入到第一行中
w2.writeheader()
# 一次写入一行内容,一行内容对应一个字典
w2.writerow({'姓名': '小明', '年龄': 18, '电话': '110', '分数': 90})
# 同时写入多行内容
w2.writerows([
    {'姓名': '李华', '年龄': 18, '电话': '120', '分数': 98},
    {'姓名': '张三', '年龄': 19, '电话': '130', '分数': 80}
])
# 写完后关闭文件
f.close()

二、bs4

        注意:安装的时候安装beautifulsoup4,使用的是bs4;使用的时候需要额外安装第三方库lxml;beautifulsoup4是基于css选择器的网页数据解析器(可以解析html也可以解析xml)

        BeautifulSoup对象.select(css选择器) → 获取整个网页中指定选择器选中的所有标签,返回值是列表,列表中的元素是标签对象

        BeautifulSoup对象.select_one(css选择器) → 获取整个网页中指定选择器选中的第一个标签,返回值是列表,列表中的元素是标签对象

        标签对象select(css选择器) → 获取指定标签中指定选择器选中的所有标签,返回值是列表,列表中的元素是标签对象

        标签对象select_one(css选择器) → 获取指定标签中指定选择器选中的第一个标签,返回值是列表,列表中的元素是标签对象

from bs4 import BeautifulSoup
import requests
# 准备网页源代码(来源于requests或者selenium)
header = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 Edg/114.0.1823.82'
}
response = requests.get('https://movie.douban.com/top250',headers=header)
result = response.text

# 创建BeautifulSoup对象:BeautifulSoup(网页源代码,'lxml')
soup = BeautifulSoup(result,'lxml')

# 获取标签(需要获取网页内容,先获取提供网页内容的标签)
'''
BeautifulSoup对象.select(css选择器)       -  获取整个网页中指定选择器选中的所有标签,返回值是列表,列表中的元素是标签对象
BeautifulSoup对象.select_one(css选择器)   -  获取整个网页中指定选择器选中的第一个标签,返回值是列表,列表中的元素是标签对象
标签对象select(css选择器)                 -  获取指定标签中指定选择器选中的所有标签,返回值是列表,列表中的元素是标签对象
标签对象select_one(css选择器)             -  获取指定标签中指定选择器选中的第一个标签,返回值是列表,列表中的元素是标签对象
'''
# result1 = soup.select('div.nav-items>ul>li>a')
result = soup.select('dic.nav-items a')
print('--------------------分割线-------------------')

result2 = soup.select_one('dic.nav-items a')
print(result2)
print('--------------------分割线-------------------')

result3 = soup.select('dic.nav-items a')[1]
print(result3)
print('--------------------分割线-------------------')

result4 = soup.select('div.nav-items>ul>li:nth-child(2)>a')
print(result4)
print('--------------------分割线-------------------')

score_tags = soup.select('.rating_num')
print(score_tags)

# 获取标签内容和标签属性
# 获取标签内容:标签对象.text
score1 = score_tags[0]
print(score1.text)
# 获取标签属性:标签对象.sttrs[属性名]
img = soup.select_one('.pic img')
print(img.attrs['alt'])
print(img.attrs['src'])
print(img.attrs['width'])

你可能感兴趣的:(爬虫,爬虫,学习,python)