BeautifulSoup 库 和 re 库 解析腾讯视频电影
1 import requests
2 import json
3 from bs4 import BeautifulSoup #网页解析获取数据
4 import sys
5 import re
6 import urllib.request,urllib.error #制定url,获取网页数据
7 import sqlite3
8 import xlwt #excel操作
9 import time
10 import pymysql
11 import traceback
12 #连接数据库 获取游标
13 def get_conn():
14 """
15 :return: 连接,游标
16 """
17 # 创建连接
18 conn = pymysql.connect(host="82.157.112.34",
19 user="root",
20 password="root",
21 db="MovieRankings",
22 charset="utf8")
23 # 创建游标
24 cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
25 if ((conn != None) & (cursor != None)):
26 print("数据库连接成功!游标创建成功!")
27 else:
28 print("数据库连接失败!")
29 return conn, cursor
30 #关闭数据库连接和游标
31 def close_conn(conn, cursor):
32 if cursor:
33 cursor.close()
34 if conn:
35 conn.close()
36 return 1
37
38 #爬取腾讯视频电影数据
39 def get_ten():
40 conn,cursor=get_conn()
41 sql="select count(*) from movieten"
42 cursor.execute(sql)
43 conn.commit()
44 all_num=cursor.fetchall()[0][0]
45
46 print("数据库有",all_num,"条数据!")
47 # https://v.qq.com/channel/movie?listpage=1&channel=movie&sort=18&_all=1&offset=0&pagesize=30
48 url="https://v.qq.com/channel/movie?listpage=1&channel=movie&sort=18&_all=1" #链接
49 param={ #参数字典
50 'offset':0,
51 'pagesize':30
52 }
53 headers={ #UA伪装
54 'user-agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '+
55 'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36'
56 }
57 param['offset']=all_num
58 offset = all_num #拼接url
59 dataRes = []
60 findLink = re.compile(r'href="(.*?)"') # 链接
61 findName = re.compile(r'title="(.*?)"') # 影片名
62 findScore= re.compile(r'<div class="figure_score">(.*?) </div>') #评分
63 #3*170
64 for i in range(0,170):
65 # res = urllib.request.urlopen(url) #urllib不推荐使用
66 res = requests.get(url=url,params=param,headers=headers) #编辑request请求
67 res.encoding='utf-8' #设置返回数据的编码格式为utf-8
68 html=BeautifulSoup(res.text,"html.parser") #BeautifulSoup解析
69 part_html = html.find_all(r"a", class_="figure") #找到整个html界面里a标签对应的html代码,返回值是一个list
70 offset = offset + 30 #修改参数字典+30部电影
71 param['offset'] = offset
72 print(param['offset'])
73 for i in part_html: #遍历每一个part_html
74 # print(i)
75 words = str(i)
76 name=re.findall(findName, words)# 添加影片名
77 score=re.findall(findScore, words)# 添加评分
78 link=re.findall(findLink, words)# 添加链接
79 findState=BeautifulSoup(words,'lxml') #单独解析播放状态
80 state=findState.select('a > img') #找到img父级标签
81 if(len(state)==1): #免费电影不存在播放状态的标志,所以当img长度是1的时候,需要补上一个空串
82 state.append("")
83 state_text=str(state[1]) #拿到第二个img对应的内容,使用正则匹配到alt属性对应的字符串
84 # print(state_text)
85 temp_state=re.findall('<img alt="(.*?)"', state_text)
86 if(len(temp_state)==0):
87 temp_state.insert(0,"免费") # 添加播放状态---免费
88 # print(temp_state[0])
89 list_=[]
90 if(len(score)==0):
91 score.insert(0,"暂无评分")
92 for i in dataRes:
93 if name[0] in i[0]:
94 name.insert(0,name[0]+"(其他版本)")
95 list_.append(name[0])
96 list_.append(score[0])
97 list_.append(link[0])
98 list_.append(temp_state[0])
99 # list_.append(statu)
100 # print(list_)
101 print(list_)
102 dataRes.append(list_)
103 # print(dataRes) #打印最终结果
104 # list=html.select(".figure_score")
105 # for item in list:
106 # print(item)
107
108 #把同一部电影的信息放到一个 [ ] 里面
109
110 return dataRes
111 #插入到腾讯电影数据库
112 def insert_ten():
113 """
114 插入腾讯电影数据
115 :return:
116 """
117 cursor = None
118 conn = None
119 try:
120 list = get_ten()
121 print(f"{time.asctime()}开始插入腾讯电影数据")
122 conn, cursor = get_conn()
123 sql = "insert into movieten (id,name,score,path,state) values(%s,%s,%s,%s,%s)"
124 for item in list:
125 cursor.execute(sql,[0,item[0],item[1],item[2],item[3]])
126 conn.commit() # 提交事务 update delete insert操作
127 print(f"{time.asctime()}插入腾讯电影数据完毕")
128 except:
129 traceback.print_exc()
130 finally:
131 close_conn(conn, cursor)
132 return ;
133 if __name__ == '__main__':
134 # conn,cursor=get_conn()
135 # list=[]
136 res_list=get_ten()
137 # print(res_list)
138 # insert_ten()
BeautifulSoup 库 和 re 库 解析腾讯视频电影的更多相关文章
- python库:bs4,BeautifulSoup库、Requests库
Beautiful Soup https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/ Beautiful Soup 4.2.0 文档 htt ...
- GO语言标准库—命令行参数解析FLAG
flag包是Go语言标准库提供用来解析命令行参数的包,使得开发命令行工具更为简单 常用方法 1.flag.Usage 输出使用方法,如linux下ls -h的帮助输出 2.flag.Type(参数名, ...
- C语言cJSON库的使用,解析json数据格式
C语言cJSON库的使用,解析json数据格式 摘自:https://www.cnblogs.com/piaoyang/p/9274925.html 对于c语言来说是没有字典这样的结构的,所以对于解析 ...
- 「Python 编程」编码实现网络请求库中的 URL 解析器
摘要:怎么写出更短的代码并不是这次要讨论的话题.今天我们来研究一下:运行代码的计算机是如何找到目标服务器的? 相信各位 Python 开发者都用过 Requests 库,有些朋友还用过 WebSock ...
- [python爬虫]Requests-BeautifulSoup-Re库方案--Requests库介绍
[根据北京理工大学嵩天老师“Python网络爬虫与信息提取”慕课课程编写 文章中部分图片来自老师PPT 慕课链接:https://www.icourse163.org/learn/BIT-10018 ...
- Python常用的标准库以及第三方库有哪些?
20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们是: Requests.Kenneth Reitz ...
- Python常用的标准库以及第三方库
Python常用的标准库以及第三方库有哪些? 20个必不可少的Python库也是基本的第三方库 读者您好.今天我将介绍20个属于我常用工具的Python库,我相信你看完之后也会觉得离不开它们.他们 ...
- Python:requests库、BeautifulSoup4库的基本使用(实现简单的网络爬虫)
Python:requests库.BeautifulSoup4库的基本使用(实现简单的网络爬虫) 一.requests库的基本使用 requests是python语言编写的简单易用的HTTP库,使用起 ...
- Python 常用的标准库以及第三方库有哪些?
作者:史豹链接:https://www.zhihu.com/question/20501628/answer/223340838来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Linux下Gcc生成和使用静态库和动态库详解(转)
一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行. 由于windows和linux的平台不同( ...
随机推荐
- spring boot2.0集成mybatis-plus实战
说明: 本例演示spring boot2.0如何集成mybatis-plus 如何使用代码生成器 项目源码: https://gitee.com/indexman/mybatis-plus-demo ...
- 解决springboot整合freemarker页面跳转404
问题说明 spring boot 2.1.5集成freemarker时跳转报404! 集成过程说明 pom.xml <dependency> <groupId>org.free ...
- mdbook安装使用实录
简介 mdbook是一个基于Rust的电子书系统,效果类似于gitbook.本人写图文文章一直都采用的印象笔记,但是写系列教程的情况不方便管理.因此引入mdBook,分享一下基本安装使用过程及遇到的问 ...
- Lucene介绍与使用
Lucene介绍与使用 原文链接:https://blog.csdn.net/weixin_42633131/article/details/82873731 不选择使用Lucene的6大原因? 原文 ...
- 硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件
前言 有了原理图,可以设计硬件PCB,在设计PCB之间还有一个协同优先动作,就是映射封装,原理图库的元器件我们是自己设计的.为了更好的表述封装设计过程,本文描述了一个创建asm1117-3.3V封 ...
- windows下的批处理bat文件和Linux下的shell文件的含义
原文:https://www.cnblogs.com/caiguodong/p/10308255.html shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 ...
- 领略一下swift函数派发机制流程
函数派发 Swift中函数的派发机制有三种:静态派发,函数表派发,消息派发. 静态派发 静态派发是指在运行时不需要查表,直接跳转到方法进行执行.静态派发的性能也是最高的.c语言采用的是直接派发. 函数 ...
- Gitlab中的打包作业完成后,更新http服务器里的版本号文件
背景 在.gitlab-ci.yml里面,我们有4个场景 dotnet build.dotnet pack和dotnet push 单元测试 SSH到http服务器,更新对应的版本号文件里面的版本数字 ...
- OFDM系统各种QAM调制阶数在多径信道下的误码性能仿真(暂存版本)
本文考虑OFDM系统在多径信道下的误码性能 代码 clc;close all;clear %% Seting parameters EbN0_list = 20:2:40; Q_order_list ...
- 压测中TPS上不去的几种原因及分析?
1. 服务器资源限制:服务器的硬件资源(如 CPU.内存.磁盘)可能不足以处理大量的请求.在高负载情况下,服务器可能无法及时响应所有的请求,导致 TPS 上不去.解决方法可以考虑升级硬件资源或通过负载 ...