爬虫,简单爬虫基础!

爬虫的分类:
1,通过网络爬虫(需要遵守robots协议)
robots协议:网站会告诉你什么东西该爬,什么东西不该爬,一旦爬去网站会将你屏蔽掉,通过网络爬虫就需要遵守robots协议(这是一个君子协议!)
https://www.taobao.com/robots.txt
robots截取淘宝部分君子协议
2.自己写的爬虫程序爬取!
既然有爬虫就有反爬虫,爬虫和反爬虫斗争的第一步就是构造请求对象User-Agent ,我们最适合是爬虫语言就是python,java是python爬虫最大的竞争对手,但是java代码笨重,这里我们用python来实现第一个简单的爬虫
先看一下没有重构的User-Agent是一个什么样式的
User-Agent
这里没有重构的User-Aget是Python-urllib/3.6也是就是我们是用python3爬取的,这样网站的运维人员一看就知道我们是爬虫,立马就把我们给干掉了,所以这里我们就需要重构一个User-Agent.
这种User-Agent在网上一查一大把,可以随便用.
在python3 中我们在网上查了一个User-Agent,记住这里是一个字典,绝对不是一个字符串.先这样写,我们知道python是非常灵活的,有很多方法来完成User-Agent的
接下来我们开始一个正式的小爬虫程序,在这里我们爬取的是猫眼电影的一些电影信息,存放在excel文件中.
爬虫的爬取数据的步骤,
1.确定需要爬取的URL的地址(这非常重要,你要直到你要爬取的URL是什么!)
2.由请求模块向URL地址发送请求,并得到网站的响应
3.从响应内容中提取所需要数据(保存,在继续爬取)
这就是我们一个基本的爬虫的思路.一个简单的爬虫前期还需要准备一些库,python提供了强大的请求模块requests
接下来我们分析一下代码:
首先准备好我们所需要的库
这里创建了类,定义了地址和连接mysql数据库,创建游标对象。

class LianJia(object):
    def __init__(self):
        self.url='https://sh.lianjia.com/ershoufang/pg'
        self.db = pymysql.connect(
            '127.0.0.1', 'root', '123456', 'lianjiadb', charset='utf8'
        )
        self.cursor = self.db.cursor()

接下来是获取网页,获得相应,用requests.get方法获取到html的text信息,requests一共有三个参数第一个为地址URL,请求头headers,第三个为timeout:超时时间,超过时间会抛出异常。

#获取网页
    def get_page(self,url):
        html = requests.get(
            url=url,
            headers={'User-Agent': random.choice(ua_list)}
        ).text
        # 直接调用解析函数
        self.parse_page(html)

这里是解析函数,也就是拿到html中我们想要的东西,这里用到的是正则表达式!拿到只是网页中的一些简单信息

# 解析

    def parse_page(self, html):
        pattren = re.compile(
 '<div class="info clear">.*?<a href.*?>(.*?)</a>.*?<div class="priceInfo">.*?<span>(.*?)</span>', re.S)
        r_list = pattren.findall(html)
        # print(r_list)
        self.writ_page(r_list)

把拿到的数据写入到数据库中,永久化保存,不要忘记提交数据库!!

 #写入数据库
    def writ_page(self,r_list):
        list=[]
        ins='insert into ljdb1 values(%s,%s)'
        for i in r_list:
            a=i[0],i[1]
            list.append(a)

        for film in list:
            film_name = film[0]
            film_link = film[1]
            self.cursor.execute(ins,[film_name,film_link])
            self.db.commit()

最后为主函数,主函数控制页数,数据爬取完成后关闭数据库!为了尽可能的不让后台管理人员识别出来我们这里随机等待1-3秒中,这也是爬虫和反爬很重要的机制。

  #主函数
    def main(self):
        for page in range(1,101):
            print('正在爬取第%d页....' % page)
            url=self.url+str(page)
            print('网页地址为:',url)
            self.get_page(url)
            time.sleep(random.randint(1,3))
            print('第%d页完成.' % page)
        # 断开数据库(所有页爬完之后)
        self.cursor.close()
        self.db.close()

测试如下

if __name__=="__main__":
    start = time.time()
    a=LianJia()
    a.main()
    end = time.time()
    print('执行时间: %.2f' % (end - start))

运行如下。。。。
测试
这是一个简单的爬虫也是学习爬虫的开始!爬虫可谓是斗智斗勇啊,学习的道路还很长,这是一个简单的链家数据的!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值