圆月山庄资源网 Design By www.vgjia.com

字符串常用方法

# 去掉左右空格
'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))

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

    标签:
    python,爬虫,电影,csv,mysql,存储

    圆月山庄资源网 Design By www.vgjia.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
圆月山庄资源网 Design By www.vgjia.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?