python3抓取电影天堂存mysql出错如何解决? (已解决)
项目简介:抓取电影天堂的数据,xpath解析,存mysql
问题描述:
连续抓取并存储六页数据后,从第七页开始就不能存数据库了,直接回滚数 据库,至今仍未解决,请大佬会的麻烦解答一下 已解决
# python
# -*- coding:utf-8 -*-
# author:Only time:2019/8/15# 爬取电影天堂 2019必看热片 名字、详情页 xpath解析 存mysqlimport requests
import pymysql
from lxml import etree# 获取所有网址
def get_urlpage():base_url = 'https://www.dy2018.com/html/bikan/'pagelist = []pagelist.append(base_url) # 第一页 比较特殊for i in range(2,23):url = base_url + 'index_' + str(i) + '.html'pagelist.append(url)print(pagelist)return pagelist# 解析网页 获取 电影名字、详情页面
def html_parse_save_sql():# 连接数据库conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123qwe',database='only',charset='utf8')# 创建数据库游标cursor = conn.cursor()# 创建表sql_1 = 'create table Dy(id int primary key auto_increment not null ,name varchar(200) not null,info varchar(200))'cursor.execute(sql_1)try:header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'}for page in get_urlpage():response = requests.get(page,headers = header)response.encoding = 'gbk' # 解决乱码问题print(response.status_code) # 查询状态码responsee = response.texthtml = etree.HTML(responsee)name = html.xpath('//table//tr[2]//b/a[2]/text()') # 注意:坑: tbody千万不能写进xpath 会匹配不出结果href_1 = html.xpath('//table//tr[2]/td[2]/b/a[2]/@href')info = [] # 存完整的详情页网址for i in range(len(href_1)):info_1 = 'https://www.dy2018.com' + href_1[i]info.append(info_1)for i in range(len(info)):sql_2 = 'insert into Dy(name,info) values ("%s","%s")'cursor.execute(sql_2 % (name[i],info[i]))print(info[i])# 从游标中获取结果cursor.fetchall()# 提交结果conn.commit()print("结果已提交")except Exception as e:# 数据回滚conn.rollback()print("数据已回滚")# 关闭数据库conn.close()if __name__ == '__main__':html_parse_save_sql()
更新:
注意!!!
坑1:xpath解析时要避免出现tbody,否则会出现错误,匹配不了数据。
坑2:很奇怪,爬取电影天堂时从第七页开始,名字与链接的数量就不同了,到现在我不知道是什么原因!一开始我是以链接的长度为range的,但是出现错误,因为链接的长度有时会大于名字的长度,要以长度短的为range,即在代码中纠正。
坑3:一定要结合异常处理分析错误。
一、代码展示:
# python
# -*- coding:utf-8 -*-
# author:Only time:2019/8/15# 爬取电影天堂 2019必看热片 名字、详情页 xpath解析 存mysqlimport requests
import pymysql
from lxml import etree# https://www.dy2018.com/html/bikan/index_7.html
# 获取所有网址
def get_urlpage():base_url = 'https://www.dy2018.com/html/bikan/'pagelist = []pagelist.append(base_url) # 第一页 比较特殊for i in range(2,23):url = base_url + 'index_' + str(i) + '.html'pagelist.append(url)return pagelist# 解析网页 获取 电影名字、详情页面
def html_parse_save_sql():# 连接数据库conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='123qwe',database='only',charset='utf8')# 创建数据库游标cursor = conn.cursor()# 创建表sql_1 = 'create table Dy(id int primary key auto_increment not null ,name varchar(200) not null,info varchar(200))'cursor.execute(sql_1)try:header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'}for page in get_urlpage():response = requests.get(page,headers = header)response.encoding = 'gbk' # 解决乱码问题print(response.status_code) # 查询状态码responsee = response.texthtml = etree.HTML(responsee)name = html.xpath('//table//tr[2]//b/a[2]/text()') # 注意:坑1: tbody千万不能写进xpath 会匹配不出结果href_1 = html.xpath('//table//tr[2]/td[2]/b/a[2]/@href')info = [] # 存完整的详情页网址for i in range(len(href_1)):info_1 = 'https://www.dy2018.com' + href_1[i]info.append(info_1)# 测试匹配到的数据为多少print(len(name))print(len(info))for i in range(len(name)): # 注意:坑2:第七页开始匹配的名字与链接数目不同,到现在我也不知道为什么!!sql_2 = 'insert into Dy(name,info) values ("%s","%s")'cursor.execute(sql_2 % (name[i],info[i]))print("插入成功")# 从游标中获取结果cursor.fetchall()# 提交结果conn.commit()print("结果已提交")except Exception as e:# 数据回滚conn.rollback()print("数据已回滚")print(e)# 关闭数据库conn.close()if __name__ == '__main__':html_parse_save_sql()
二、运行结果:
三、查看数据库:
四、解决!
五、总结:
(1) 一定要结合异常处理分析出错,便于你快速知道错误原因。
(2) xpath解析一定不能加入tbody,否则匹配不了
(3)注意range()、len()的使用
python3抓取电影天堂存mysql出错如何解决? (已解决)相关推荐
- Node.js 抓取电影天堂新上电影节目单及ftp链接
代码地址如下: http://www.demodashi.com/demo/12368.html 1 概述 本实例主要使用Node.js去抓取电影的节目单,方便大家使用下载. 2 node packa ...
- python3批量抓取电影天堂下载链接
1.思路分析 首先打开电影天堂的列表页 右键审查元素查看电影简介的链接 将此链接打开可以得到下载地址 可能是爬虫原因网站审查元素和用request得到的数据不一样,因此代码的正则表达式会改变 加上列表 ...
- python下载电影_Python抓取电影天堂电影信息的代码
Python2.7Mac OS 抓取的是电影天堂里面最新电影的页面.链接地址: http://www.dytt8.net/html/gndy/dyzz/index.html 获取页面的中电影详情页链接 ...
- Python抓取电影天堂电影信息
最近想做一个电影资讯的App,由于豆瓣不对外开发API了,正愁怎么录入数据呢.最近在学Python想想那就用它来抓取电影信息吧. Python2.7 Mac OS 抓取的是电影天堂里面最新电影的页面. ...
- python爬取电影天堂beautiful_Python爬虫 -- 抓取电影天堂8分以上电影
看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...
- 基于Python抓取电影天堂数据
一.开头 在花了近半年的课余时间学习了Python的基础语法后开始尝试网页的抓取,学了一个星期,刚开始的抓取比较小的网页尝到甜头后,疯狂的找各种网页抓取,当然也被各种虐得反爬虐 - -! 于是决定认真 ...
- python3 爬取电影天堂最新电影
''' 作业 爬去dytt 2019新片精品 -> 把所有电影的名字, 主演, 下载链接. 放在一个json文件里 {{"main_people": ["井柏然&q ...
- 爬虫python下载电影_python爬虫抓取电影天堂最新电影
该小脚本实现对电影天堂网站的最新电影查找.from bs4 import BeautifulSoup import urllib import re url= 'http://www.ygdy8.ne ...
- python爬取电影天堂(requests模块)
使用requests,lxml对电影天堂网站数据的爬取 在这里插入代码片 # _*_ coding:utf _*_ # 邮箱:3195841740@qq.com # 人员:21292 # 日期:202 ...
最新文章
- python实现简单爬虫功能(网站图片)
- 【Vegas原创】SQL Sever系统表及系统procedure的总结
- FFT IP核调用与仿真之SCALE压缩因子设置
- 禁忌搜索算法求解带时间窗的车辆路径问题原理讲解
- SAP Spartacus storefront 模块的实现位置
- 【BZOJ2300】[HAOI2011]防线修建 set维护凸包
- [CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符
- win10快速运行vue项目跑起来 - 方法篇
- java实现蛇蛇大作战_蛇蛇大作战3D旋涡版
- Windows安全不能靠本地管理员权限
- 浅谈JS、Ajax、JQuery之间的关系
- win10怎么用计算机的搜索,win10 搜索用不了的问题
- awksed story
- PMP课程笔记:第8章 项目质量管理
- 推荐13个高清优质无版权图库
- Fiori 动态磁贴示例
- 【已解决】【V2版本】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?
- android 输入法更换_详解安卓手机输入法和键盘切换方式的教程
- 批量处理 | 起点和终点交叉配对进行路线查询
- java程序计算鸡兔同笼_.请编写一个Java程序,能够计算鸡兔同笼问题,已知笼中共有9个头和26只脚,要求计算出该笼中有几只兔子几...