字符串常用方法
# 去掉左右空格 'hello world'.strip() # 'hello world' # 按指定字符切割 'hello world'.split(' ') # ['hello','world'] # 替换指定字符串 'hello world'.replace(' ','#') # 'hello#world'
csv模块
作用:将爬取的数据存放到本地的csv文件中
使用流程
- 导入模块
- 打开csv文件
- 初始化写入对象
- 写入数据(参数为列表)
import csv with open('test.csv','w') as f: writer = csv.writer(f) # 初始化写入对象 # 写一行 writer.writerow(['超哥哥',20]) writer.writerow(['步惊云',22]) with open('test.csv','a') as f: writer = csv.writer(f) # 写多行 data_list = [('聂风',23),('秦霜',30)] writer.writerows(data_list)
Windows中使用csv模块默认会在每行后面添加一个空行,使用newline=''可解决
with open('xxx.csv','w',newline='') as f:
猫眼电影top100抓取案例
确定URL网址
猫眼电影 - 榜单 - top100榜 目标
电影名称、主演、上映时间 操作步骤
1、查看是否为动态加载
右键 - 查看网页源代码 - 搜索爬取关键字(查看在源代码中是否存在)
2、找URL规律
- 第1页:https://maoyan.com/board/4"movie-item-info">.*"(.*".*"star">(.*">(.*"htmlcode">
from urllib import request import time import re import csv import random class MaoyanSpider(object): def __init__(self): self.page = 1 # 用于记录页数 self.url = 'https://maoyan.com/board/4"movie-item-info">.*"(.*".*"star">(.*">(.*"") as f: writer = csv.writer(f) for rt in r_list: # 把处理过的数据定义成元组 t = (rt[0], rt[1].strip(), rt[2].strip()[5:15]) film_list.append(t) writer.writerows(film_list) def main(self): for offset in range(0, 31, 10): url = self.url.format(offset) self.get_page(url) time.sleep(random.randint(1, 3)) print('第%d页爬取完成' % self.page) self.page += 1 if __name__ == '__main__': start = time.time() spider = MaoyanSpider() spider.main() end = time.time() print('执行时间: %.2f' % (end - start))
数据持久化存储(MySQL数据库)
让我们来回顾一下pymysql模块的基本使用
import pymysql db = pymysql.connect('localhost', 'root', '123456', 'maoyandb', charset='utf8') cursor = db.cursor() # 创建游标对象 # execute()方法第二个参数为列表传参补位 cursor.execute('insert into film values(%s,%s,%s)', ['霸王别姬', '张国荣', '1993']) db.commit() # 提交到数据库执行 cursor.close() # 关闭 db.close()
让我们来回顾一下pymysql中executemany()的用法
import pymysql # 数据库连接对象 db = pymysql.connect('localhost', 'root', '123456', charset='utf8') cursor = db.cursor() # 游标对象 ins_list = [] # 存放所有数据的大列表 for i in range(2): name = input('请输入第%d个学生姓名:' % (i + 1)) age = input('请输入第%d个学生年龄:' % (i + 1)) ins_list.append([name, age]) ins = 'insert into t3 values(%s,%s)' # 定义插入语句 cursor.executemany(ins, ins_list) # 一次数据库的IO操作可插入多条语句,提升性能 db.commit() # 提交到数据库执行 cursor.close() # 关闭游标 db.close() # 关闭数据库 ins = 'insert into maoyanfilm values(%s,%s,%s)' cursor.execute(['霸王', '国荣', '1991']) cursor.executemany([ ['月光宝盒', '周星驰', '1993'], ['大圣娶亲', '周星驰', '1993']])
练习:把猫眼电影案例中电影信息存入MySQL数据库中(尽量使用executemany方法)
from urllib import request import time import re import pymysql import random class MaoyanSpider(object): def __init__(self): self.page = 1 # 用于记录页数 self.url = 'https://maoyan.com/board/4"movie-item-info">.*"(.*".*"star">(.*">(.*"htmlcode">
import pymongo # 1.连接对象 conn = pymongo.MongoClient(host='127.0.0.1', port=27017) db = conn['maoyandb'] # 2.库对象 myset = db['filmtab'] # 3.集合对象 myset.insert_one({'name': '赵敏'}) # 4.插入数据库
练习:把猫眼电影案例中电影信息存入MongDB数据库中
from urllib import request import re import time import random import pymongo class MaoyanSpider(object): def __init__(self): self.url = 'https://maoyan.com/board/4"movie-item-info">.*"(.*".*"star">(.*">(.*"color: #ff0000">电影天堂案例(二级页面抓取)
1、查看是否为静态页面,是否为动态加载
右键 - 查看网页源代码
2、确定URL地址
百度搜索 :电影天堂 - 2019年新片 - 更多
3、目标
*********一级页面***********
1、电影名称
2、电影链接
*********二级页面***********
1、下载链接
4、步骤
找URL规律
第1页 :https://www.dytt8.net/html/gndy/dyzz/list_23_1.html
第2页 :https://www.dytt8.net/html/gndy/dyzz/list_23_2.html
第n页 :https://www.dytt8.net/html/gndy/dyzz/list_23_n.html
写正则表达式
1、一级页面正则表达式(电影名称、电影详情链接)
<table width="100%".*"26">.*"(.*" rel="external nofollow" rel="external nofollow" .*?>(.*"WORD-WRAP.*?>.*?>(.*"htmlcode">
from urllib import request import re import time import random from useragents import * import pymysql class FilmSky(object): def __init__(self): self.url = 'https://www.dytt8.net/html/gndy/dyzz/list_23_{}.html' # 定义两个对象 self.db = pymysql.connect('127.0.0.1', 'root', '123456', 'maoyandb', charset='utf8') self.cursor = self.db.cursor() # 获取html函数(因为两个页面都需要发请求) def get_page(self, url): req = request.Request(url=url, headers={'User-Agent': random.choice(ua_list)}) res = request.urlopen(req) # ignore参数,实在处理不了的编码错误忽略 # 查看网页源码,发现网页编码为 gb2312,不是 utf-8 html = res.read().decode('gbk', 'ignore') return html # 解析提取数据(把名称和下载链接一次性拿到) # html为一级页面响应内容 def parse_page(self, html): # 1. 先解析一级页面(电影名称 和 详情链接) pattern = re.compile('<table width="100%".*"26">.*"(.*" rel="external nofollow" rel="external nofollow" .*?>(.*"WORD-WRAP.*?>.*?>(.*?)</a>', re.S) download_link = pattern.findall(two_html)[0] return download_link # 主函数 def main(self): for page in range(1, 11): url = self.url.format(page) html = self.get_page(url) self.parse_page(html) time.sleep(random.randint(1, 3)) print('第%d页完成' % page) if __name__ == '__main__': start = time.time() spider = FilmSky() spider.main() end = time.time() print('执行时间:%.2f' % (end - start))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
华山资源网 Design By www.eoogi.com
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 潘安邦《思念精选集全纪录》5CD[WAV+CUE]
- 杨千嬅《千嬅新唱金牌金曲》金牌娱乐 [WAV+CUE][985M]
- 杨钰莹《依然情深》首版[WAV+CUE][1G]
- 第五街的士高《印度激情版》3CD [WAV+CUE][2.4G]
- 三国志8重制版哪个武将智力高 三国志8重制版智力武将排行一览
- 三国志8重制版哪个武将好 三国志8重制版武将排行一览
- 三国志8重制版武将图像怎么保存 三国志8重制版武将图像设置方法
- 何方.1990-我不是那种人【林杰唱片】【WAV+CUE】
- 张惠妹.1999-妹力新世纪2CD【丰华】【WAV+CUE】
- 邓丽欣.2006-FANTASY【金牌大风】【WAV+CUE】
- 饭制《黑神话》蜘蛛四妹手办
- 《燕云十六声》回应跑路:年内公测版本完成95%
- 网友发现国内版《双城之战》第二季有删减:亲亲环节没了!
- 邓丽君2024-《漫步人生路》头版限量编号MQA-UHQCD[WAV+CUE]
- SergeProkofievplaysProkofiev[Dutton][FLAC+CUE]