五分钟带你学会Python网络爬虫

但不管怎样,爬虫技术是无罪的,还是值得我们开发人员去学习了解一下的。在学习之前,我们还是要先了解一下相关概念。

什么是爬虫?

网络爬虫:又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动的抓取万维网信息的程序或者脚本。

大数据时代,要进行数据分析,首先要有数据源,可数据源从哪里来,花钱买,没预算,只能从其它网站就行抓取。

细分下来,业内分为两类:爬虫和反爬虫。

反爬虫:顾名思义,就是防止你来我网站或APP上做爬虫的。

爬虫工程师和反爬虫工程师是一对相爱相杀的小伙伴,经常因为对方要加班写代码,甚至丢掉工作。比如下面这张图,大家用心感受一下:

爬虫的基本原理:

如上图所示,爬虫的第一个步骤就是对所要爬取的网页进行请求,以获取其相应返回的结果,然后在使用一些方法,对响应内容解析,提取想要的内容资源,最后,将提取出来的资源保存起来。

爬虫工具和语言选择

一、爬虫工具

工欲善其事必先利其器的道理相信大家都懂的,想要提升效率,一些常用的工具是必不可少的,以下就是个人推荐的几款工具:Chrome、Charles、Postman、Xpath-Helper

二、爬虫语言

目前主流的Java、Node.js、C#、python等开发语言,都可以实现爬虫。

所以,在语言的选择上,你可以选择最擅长的语言来进行爬虫脚本的编写。

目前爬虫这块用的最多的是python,因为python语法简洁,方便修改,而且python里有多爬虫相关的库,拿过来就可以使用,网上的资料也比较多。

Python 爬虫Selenium库的使用

一、基础知识

首先要使用python语言做爬虫,需要学习一下python的基础知识,还有HTML、CSS、JS、Ajax等相关的知识。这里,列出python中一些与爬虫相关的库和框架:

1.1、urllib和urllib2
1.2、Requests
1.3、Beautiful Soup
1.4、Xpath语法与lxml库
1.5、PhantomJS
1.6、Selenium
1.7、PyQuery
1.8、Scrapy
......
复制代码

因为时间有限,本文只介绍Selenium库的爬虫技术,像自动化测试,还有其它库和框架的资料,感兴趣的小伙伴可以自行学习。

二、Selenium基础

2.1、Selenium是一个用于测试网站的自动化测试工具,支持各种浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持phantomJS无界面浏览器。

2.2、安装方式

pip install Selenium
复制代码

2.3、Selenium定位元素的8种方式

 爬虫实例演示

本案例的需求是:抓取豆瓣电影Top250电影信息。

url:https://movie.douban.com/top250
复制代码

 开发工具采用PyCharm,数据库采用sqlServer2012。

数据库表脚本:

CREATE TABLE Movies
(
	Id INT PRIMARY KEY IDENTITY(1,1),
	Name NVARCHAR(20) NOT NULL DEFAULT '',
	EName NVARCHAR(50) NOT NULL DEFAULT '',
	OtherName NVARCHAR(50) NOT NULL DEFAULT '',
	Info NVARCHAR(600) NOT NULL DEFAULT '',
	Score NVARCHAR(5) NOT NULL DEFAULT '0',
	Number NVARCHAR(20) NOT NULL DEFAULT '0',
	Remark NVARCHAR(200) NOT NULL DEFAULT '',
	createUser INT NOT NULL DEFAULT 0,	
	createTime DATETIME DEFAULT GETDATE(),
	updateUser INT NOT NULL DEFAULT 0,	
	updateTime DATETIME DEFAULT GETDATE()
);
复制代码

爬虫的第一步,分析url,经过分析,豆瓣电影Top250页面的url有一定的规则:

每页显示25条电影信息,url规则如下,以此类推。

 接着,再对网页源码进行分析:

最后,编写爬虫脚本:

import importlib
import random
import sys
import time
import pymssql
from selenium import webdriver
from selenium.webdriver.common.by import By

# 反爬虫设置--伪造IP和请求
ip = ['111.155.116.210', '115.223.217.216', '121.232.146.39', '221.229.18.230', '115.223.220.59', '115.223.244.146',
      '180.118.135.26', '121.232.199.197', '121.232.145.101', '121.31.139.221', '115.223.224.114']
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",
    'X-Requested-With': 'XMLHttpRequest',
    'X-Forwarded-For': ip[random.randint(0, 10)],
    'Host': ip[random.randint(0, 10)]
}

importlib.reload(sys)

try:
    conn = pymssql.connect(host="127.0.0.1", user="sa", password="123", database="MySchool",charset="utf8")
except pymssql.OperationalError as msg:
    print("error: Could not Connection SQL Server!please check your dblink configure!")
    sys.exit()
else:
    cur = conn.cursor()

def main():
    for n in range(0, 10):
        count = n*25
        url = 'https://movie.douban.com/top250?start='+str(count)
        j = 1
        # if(n == 7):
        #     j = 5
        for i in range(j, 26):
            driver = webdriver.PhantomJS(desired_capabilities=headers)  # 封装浏览器信息
            driver.set_page_load_timeout(15)
            driver.get(url)  # 加载网页
            # data = driver.page_source  # 获取网页文本
            # driver.save_screenshot('1.png')  # 截图保存

            name = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[0].text.replace('\'', '')
            ename = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[1].text.replace("/", "").replace(" ", "").replace('\'', '')
            try:
                otherName = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[2].text.lstrip(' / ').replace("/", "|").replace(" ", "").replace('\'', '')
            except:
                otherName = ''
            info = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p")[0].text.replace("/", "|").replace(" ", "").replace('\'', '')
            score = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[2]")[0].text.replace('\'', '')
            number = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[4]")[0].text.replace("人评价", "").replace('\'', '')
            remark = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p/span")[0].text.replace('\'', '')

            sql = "insert into Movies(Name,EName,OtherName,Info,Score,Number,Remark) values('"+name + \
                "','"+ename+"','"+otherName+"','"+info + \
                "','"+score+"','"+number+"','"+remark+"') "
            try:
                cur.execute(sql)
                conn.commit()
                print("第"+str(n)+"页,第"+str(i)+"条电影信息新增成功")
                time.sleep(30)
            except:
                conn.rollback()
                print("新增失败:"+sql)
            driver.quit()

if __name__ == '__main__':
    main()
复制代码

 成果展示:

Python学习资源及经验总结

如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,我也为大家整理了一份【最新全套Python学习资料】一定对你有用!

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的!

1、学习时间相对较短,学习内容更全面更集中

2、可以找到适合自己的学习方案

这份资料包含:Python安装包+激活码、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等教程,带你从零开始系统性的学好Python!

点击免费领取《CSDN大礼包》:

最新全套【Python入门到进阶资料 & 实战源码 & 安装工具】icon-default.png?t=N7T8https://mp.weixin.qq.com/s/Kam0zLeqR6Qf24KjgUgUsQ

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、Python课程视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

img

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

img

四、清华编程大佬出品《漫画看学Python》

用通俗易懂的漫画,来教你学习Python,让你更容易记住,并且不会枯燥乏味。

img

五、Python实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、互联网企业面试真题

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

img

这份完整版的Python全套学习资料已经上传至CSDN官方,朋友们如果需要可以点击下方链接费获取【保证100%免费】

点击免费领取《CSDN大礼包》:

最新全套【Python入门到进阶资料 & 实战源码 & 安装工具】icon-default.png?t=N7T8https://mp.weixin.qq.com/s/Kam0zLeqR6Qf24KjgUgUsQ

以上全套资料已经为大家打包准备好了,希望对正在学习Python的你有所帮助!


如果你觉得这篇文章有帮助,可以点个赞呀~

我会坚持每天更新Python相关干货,分享自己的学习经验帮助想学习Python的朋友们少走弯路!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值