项目简介:抓取电影天堂的数据,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出错如何解决? (已解决)相关推荐

  1. Node.js 抓取电影天堂新上电影节目单及ftp链接

    代码地址如下: http://www.demodashi.com/demo/12368.html 1 概述 本实例主要使用Node.js去抓取电影的节目单,方便大家使用下载. 2 node packa ...

  2. python3批量抓取电影天堂下载链接

    1.思路分析 首先打开电影天堂的列表页 右键审查元素查看电影简介的链接 将此链接打开可以得到下载地址 可能是爬虫原因网站审查元素和用request得到的数据不一样,因此代码的正则表达式会改变 加上列表 ...

  3. python下载电影_Python抓取电影天堂电影信息的代码

    Python2.7Mac OS 抓取的是电影天堂里面最新电影的页面.链接地址: http://www.dytt8.net/html/gndy/dyzz/index.html 获取页面的中电影详情页链接 ...

  4. Python抓取电影天堂电影信息

    最近想做一个电影资讯的App,由于豆瓣不对外开发API了,正愁怎么录入数据呢.最近在学Python想想那就用它来抓取电影信息吧. Python2.7 Mac OS 抓取的是电影天堂里面最新电影的页面. ...

  5. python爬取电影天堂beautiful_Python爬虫 -- 抓取电影天堂8分以上电影

    看了几天的python语法,还是应该写个东西练练手.刚好假期里面看电影,找不到很好的影片,于是有个想法,何不搞个爬虫把电影天堂里面8分以上的电影爬出来.做完花了两三个小时,撸了这么一个程序.反正蛮简单 ...

  6. 基于Python抓取电影天堂数据

    一.开头 在花了近半年的课余时间学习了Python的基础语法后开始尝试网页的抓取,学了一个星期,刚开始的抓取比较小的网页尝到甜头后,疯狂的找各种网页抓取,当然也被各种虐得反爬虐 - -! 于是决定认真 ...

  7. python3 爬取电影天堂最新电影

    ''' 作业 爬去dytt 2019新片精品 -> 把所有电影的名字, 主演, 下载链接. 放在一个json文件里 {{"main_people": ["井柏然&q ...

  8. 爬虫python下载电影_python爬虫抓取电影天堂最新电影

    该小脚本实现对电影天堂网站的最新电影查找.from bs4 import BeautifulSoup import urllib import re url= 'http://www.ygdy8.ne ...

  9. python爬取电影天堂(requests模块)

    使用requests,lxml对电影天堂网站数据的爬取 在这里插入代码片 # _*_ coding:utf _*_ # 邮箱:3195841740@qq.com # 人员:21292 # 日期:202 ...

最新文章

  1. python实现简单爬虫功能(网站图片)
  2. 【Vegas原创】SQL Sever系统表及系统procedure的总结
  3. FFT IP核调用与仿真之SCALE压缩因子设置
  4. 禁忌搜索算法求解带时间窗的车辆路径问题原理讲解
  5. SAP Spartacus storefront 模块的实现位置
  6. 【BZOJ2300】[HAOI2011]防线修建 set维护凸包
  7. [CareerCup] 1.1 Unique Characters of a String 字符串中不同的字符
  8. win10快速运行vue项目跑起来 - 方法篇
  9. java实现蛇蛇大作战_蛇蛇大作战3D旋涡版
  10. Windows安全不能靠本地管理员权限
  11. 浅谈JS、Ajax、JQuery之间的关系
  12. win10怎么用计算机的搜索,win10 搜索用不了的问题
  13. awksed story
  14. PMP课程笔记:第8章 项目质量管理
  15. 推荐13个高清优质无版权图库
  16. Fiori 动态磁贴示例
  17. 【已解决】【V2版本】如何使用脚本关闭Win10自动更新服务并阻止其自动启动?
  18. android 输入法更换_详解安卓手机输入法和键盘切换方式的教程
  19. 批量处理 | 起点和终点交叉配对进行路线查询
  20. java程序计算鸡兔同笼_.请编写一个Java程序,能够计算鸡兔同笼问题,已知笼中共有9个头和26只脚,要求计算出该笼中有几只兔子几...

热门文章

  1. ubuntu官方容器更换清华apt源
  2. element自定义菜单导航
  3. 10月23日:关于在FlexCell从SQL2000里加载记录,并实现层次化显示
  4. 利用香蕉派自制电视盒子
  5. JVM基础 - JAVA类加载机制
  6. LPSTR、LPCSTR、LPTSTR和LPCTSTR的意义及区别
  7. linux系统误删数据恢复方法
  8. 送给程序员“1024节“的礼物
  9. Kubernetes----单节点部署(完)(详细过程~)
  10. shell编程实战案列归纳