20170717_python_爬虫_网页数据解析_BeautifulSoup_数据保存_pymysql
上午废了老大劲成功登陆后,下午看了下BeautifulSoup和pymysql,晚上记录一下
自己电脑装的sublime,字体颜色竟然拷贝不下来 - -
写的过程中遇到了很多问题:
1.模拟登陆部分
模拟登陆看相关教程都是要用的cooklib,但是py3.x不支持这个库,换了http.cookiejar也遇到了一大堆坑,最后发现了request带的有cookie,可以拼装cookie,
然后用alert(document.cookie)获取cookie去拼cookie抓页面,但是每次抓到的都是跳转页面,一度绝望准备放弃,直到N小时候的探索候,发现了httpfox+firedebug!
简直是神器,发现之前alert时获取的cookie少了一个参数,加上去之后神奇的登录上去抓下来页面了,自学大概就是这样吧~碰运气。
2.网站结构分析
今天的目标网站是一个B2B2C网站,爬取的内容是后台的用户数据。
网站结构比较老,需要抓取的数据在table里,每行tr都有一条数据,这个可以直接通过获取所有的tr标签后进行遍历,但是这个网站的手机号字段需要点击获取按钮才可以看到,
用的是ajax+Dialogue模态框(还好前两天刚用php+bootstrap过做了个后台项目,机智如我),通过firedebug+httpfox抓包看到每次点击查看号码后,POST请求的都是同一个页面,
返回的数据竟然不仅仅是手机号!是用户信息的所有字段!网页结构瞬间难度降低.只需要获取总页数和用户Id就可以抓数据了!总页数通过指定的string获取即可,用户Id通过指定
的class获取tag.find('a', attrs={'class':'see'}),然后再去href属性,再取数字,用户的id就被取到了。
3.循环获取数据
上面已经获取了总页数和用户Id了,现在只要循环总页数次*每次的数据tr行数就可以获取全部数据.
在方法外定义一个for循环,循环了总页数次,由于有的用户没有点击查看用户联系方式(vip不可以被查看),导致有时获取用户Id时失败,所以在获取用户id时加了个判断,如果为空,
则跳出本次获取用户数据循环,成功获取数据后发现获取的数据时bytes类型,无法json解析,经过一番资料查询,确定bytes转str再转json,实际执行中发现个别人的数据无法转换,
原因不明,加了个判断先绕过去!至此,已经获取到了想要的数据了,可以通过json名['字段名']获取数据.
4.mysql存储
经过一系列的磨难,就差一步存储就可以完成了.
mysql的python只支持到了3.4版本,所以3.6版本用不了,中间尝试N次失败告终,又在网站搜集一番资料,发现用pymysql,写了个连接测试文件,测试后没问题,拷贝到这里,
万事俱备只欠东风,开始执行xxx.py,直接报错,数据库连接被关闭???然后发现数据库被关闭后再次写入没有开启,调整了下语句,继续测试,ok了,采集了40多页后报错,遇到了对方是
vip的问题,果断判断一下跳过,然后页数循环那里加上判断直接从40+页开始循环,执行到70+页后出现人名无法存数据库,不知道什么原因,直接跳过指定id继续执行,最后成功抓取107页数据.
然后通过phpmyadmin可以导出各种格式.
5.后记
路漫漫其修远兮 吾将上下而求索
自学过程中会遇到各种坑,各种问题,一定要坚持下去,可以通过搜索引擎找到答案.
等有时间了还是要把代码封装一下,规范一点,希望以后可以复用.
虽然最后实现了功能,还是有很多不完善的地方,以后慢慢改进!
20170717_python_爬虫_网页数据解析_BeautifulSoup_数据保存_pymysql的更多相关文章
- Python爬虫教程-18-页面解析和数据提取
本篇针对的数据是已经存在在页面上的数据,不包括动态生成的数据,今天是对HTML中提取对我们有用的数据,去除无用的数据 Python爬虫教程-18-页面解析和数据提取 结构化数据:先有的结构,再谈数据 ...
- 爬虫、网页分析解析辅助工具 Xpath-helper
每一个写爬虫.或者是做网页分析的人,相信都会因为在定位.获取xpath路径上花费大量的时间,甚至有时候当爬虫框架成熟之后,基本上主要的时间都花费在了页面的解析上.在没有这些辅助工具的日子里,我们只能通 ...
- 2.2 Xpath-helper (chrome插件) 爬虫、网页分析解析辅助工具
1. Xpath-helper下载 可以直接在chrome浏览器中的扩展程序搜索 Xpath-helper进行添加 也可以直接在http://www.chromein.com/crx_11654.ht ...
- 爬虫_网页url设计
为什么需要网页URL设计? 每个url不同的结构代表着不同的网页模块和信息的展现形式,为了方便维护与管理 网页url怎么设计? 分层: 主域名,子域名 一般形式为: 主域名: www.job.com ...
- post请求获取json数据 解析json数据
<script> window.onload = function () { var str; // console.log(@ViewBag.ID); $.post("/Ser ...
- iOS - XML 数据解析
前言 @interface NSXMLParser : NSObject public class NSXMLParser : NSObject 1.XML 数据 XML(Extensible Mar ...
- ADs系列之通用数据解析服务GAS(即将开源)
面对成百上千的生产系统用户操作数据接入落地,你是否厌倦了每次机械编写打包解包的代码?对一次性接入多个数据的时候,还要对不同人联调,费时费力,你是否还会手忙脚乱,忙中不断出错?是否当数据出问题了,用的时 ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
- IOS 请求数据解析 XML 和 JSON
好久没写文章了,回忆一下以前的内容记录一下吧. 这一段主要接触的就是数据解析,就说一下数据解析 现在数据解析一般解析两种数据 xml 和 JSON 那就从xml解析说起吧 xml解析需要用到一个类 N ...
随机推荐
- android studio 2.32躺坑记
按说这是没啥记录意义的.不过作为一个偶尔用一下ADT开发安卓程序的跨界老码农,遇到一个尴尬事,现在手机已经用上安卓6了,而电脑里的ADT里SDK还是18,19.越来越多的项目是android stud ...
- java基础-四种方法引用
实例 直接三角形,通过两边算第三边,目的是为了如何使用这几种方法引用.代码中多有些不合适,尽情原谅. 静态方法引用 接口的参数列表与类中的具体实现方法的参数列表一样,返回值一致. 调用 //静态引用 ...
- Java8部分新特性的学习
Java8中的新特性 一.Lambda表达式 Lambda表达式可以理解为一种可传递的匿名函数:它没有名称,但又参数列表.函数主体.返回类型,可能还有一个可以抛出的异常列表. 匿名:和匿名类类似的,它 ...
- 利用canvas压缩图片
现在手机拍的照片动不动就是几M,当用户上传手机里的照片时一个消耗流量大,一个上传时间长,为了解决这个问题,就需要压缩图片: 想法:利用canvas重绘图片,保持宽高比不变,具体宽高根本具体情况而定. ...
- MySql数据库基础操作——数据库、用户的创建,表的制作、修改等
MySql 是一款使用便捷.轻量级的数据库.因为他体积小.速度快.安装使用简单.开源等优点,目前是使用最广泛的数据库.目前位于Oracle甲骨文公司旗下.那今天我们就来介绍一下数据库的基本操作.具体介 ...
- java 局部变量几点笔记
1.局部变量的作用时间很短暂,都被存储在方法的栈内存中:2.(没使用static)非静态变量=实例变量:(使用static)静态变量=类变量3.成员变量:类体内定义的变量:4.局部变量有三种:1)形参 ...
- redis 对象
redis通过前面几篇的数据结构构键了一个对象系统,这个对象系统包含了字符串对象,列表对象,哈希对象,集合对象,有序集合对象 每一个对象都是一个redisobject typedef struct r ...
- 微信js-sdk接口的使用及ios深坑
最近再做微信公众号开发,涉及到手机上传图片和拍照的功能. 思路一:使用<input type="file" name="pic" id="pic ...
- Chapter 6. H.264/MPEG4 Part10
本章节主要介绍有关H.264的内容 H.264有三种profile,分别是: Baseline Profile Main Profile Extended Profile 三者之间的关系和主要内容可以 ...
- 【Android Developers Training】 67. 响应触摸事件
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...