python2爬虫

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yuanmuxingchen/article/details/75268019

接到导师的指示,需要使用python 2爬虫爬取一定量的数据,于是马不停蹄的开始了我的python爬虫之旅,经过十天磕磕碰碰的学习后,爬虫终于完成了。这里乘着爬数据的时间,总结一下python爬虫的内容:
首先当然是基础了,python基础可以通过网上的菜鸟教程学习。当然如果仅仅是学习爬虫的话,那后面的高阶内容很大一部分都不需要看。

用python写爬虫第一点当然是获取数据了,一般可以有三种方式

    第一种是通过python自带的urllib或者rullib2直接请求html页面,某些简单的网站的数据就在它的html里,可以通过这样的方式直接获取。如:

req = urllib2.Request(url)
page = urllib2.urlopen(req).read()   
但大多网站的数据都是js生成的,直接通过这种方式是没办法得到想要数据的。
  第二种貌似是通过调用浏览器内核还是什么,来模拟用户的点击,然后得到数据,这种方式比较万能,但是很慢,低效,所以这里不讲了(其实是没去了解)
  第三种方式和第一种差不多,是第一种的衍生,也就是通过分析想要取得数据的页面的形成方式,来直接请求它里面的数据,比如某些网站的数据是通过json
动态展示的,那我们就直接去模仿浏览器请求json的过程,直接抓取数据,如:
req = urllib2.Request(url)       #此处url是由我们自己通过浏览器的f12,然后网洛分析出来的
data = urllib2.urlopen(req).read()
如果是数据需要登陆才能获得,那么可能还要加入headers在请求里,headers可以参照浏览器开发者工具中网络里需要请求的栏目的请求头。
获取到的数据可能是这样的{"code":"1","result":"<li title='否'>有用的数据</li>\n ... ","data":null}
这里import json 用python内自带的json解析就行
data = json.loads(data)
data = data["result"]
第二点
是对数据进行解析,这里有那么三种方式,其一,正则表达式,其二beautifulsoup,其三lxml,其中正则表达式较为繁杂,后两个较为简单,这里偷一张图说明:
    抓取方法   性能     使用难度     安装难度
正则表达式困难简单(内置模块)
Beautiful Soup简单简单(纯Python)
Lxml简单相对困难
beautiful soup使用过程大概如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup(page, "html.parser")
results_1 = soup.find_all('strong')               #此处可换成其他方法。

第三点

防止网站封你ip,所以许需要使用ip代理,使用过程如下:
proxy = {'http': 'http://110.73.3.175:8123'}
# 设置代理
proxy_handler = urllib2.ProxyHandler(proxy)
opener = urllib2.build_opener(proxy_handler)
urllib2.install_opener(opener)
# 访问网页
req = urllib2.Request(url)
page = urllib2.urlopen(req).read()
既然开始设置代理了,当然不能只设置一个,你需要一个数量足够的ip代理资源池,免费ip代理 当然,也可以选择付费的,更加稳定。
可以将ip代理中ip以及端口存入本地,需要时更新(我是每次某个ip代理不能正常访问时,就将此代理删除,当本地数量过小,更新它),也可以每次使用都从这个网站获取许多个。

第四点

多线程,这个可以直接参照菜鸟教程中的线程部分

第五点
存入数据库,这里提供一个简单的demo,特别注意的是,conn.commit()执行后才会对数据库的内容进行修改。
    #coding=utf-8
    import MySQLdb
        conn= MySQLdb.connect(
                host='localhost',
                port = 3306,
                user='root',
                passwd="",
                db ='test',
                charset="utf8",
                )

        #创建数据表
         cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

        #插入一条数据
         cur.execute("insert into student values('1','chen','3 year 2 class','9')")

        #修改查询条件的数据
         cur.execute("update student set class='3 year 1 class' where name = 'chen'")

        #删除查询条件的数据
        #cur.execute("delete from student where age='9'")

         cur.close()
         conn.commit()
         conn.close()


展开阅读全文

没有更多推荐了,返回首页