快速带你学会Python网络爬虫

优采云 发布时间: 2022-05-25 17:49

  快速带你学会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<br />1.2、Requests<br />1.3、Beautiful Soup<br />1.4、Xpath语法与lxml库<br />1.5、PhantomJS<br />1.6、Selenium<br />1.7、PyQuery<br />1.8、Scrapy<br />......<br />复制代码<br />

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

  二、Selenium基础

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

  2.2、安装方式

  pip install Selenium<br />复制代码<br />

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

  

  爬虫实例演示

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

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

  

  开发工具采用PyCharm,数据库采用sqlServer2012。数据库表脚本:

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

  复制代码

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

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

  

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

  

  最后,编写爬虫脚本:

  import importlib<br />import random<br />import sys<br />import time<br />import pymssql<br />from selenium import webdriver<br />from selenium.webdriver.common.by import By<br /><br /># 反爬虫设置--伪造IP和请求<br />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',<br />      '180.118.135.26', '121.232.199.197', '121.232.145.101', '121.31.139.221', '115.223.224.114']<br />headers = {<br />    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36",<br />    'X-Requested-With': 'XMLHttpRequest',<br />    'X-Forwarded-For': ip[random.randint(0, 10)],<br />    'Host': ip[random.randint(0, 10)]<br />}<br /><br />importlib.reload(sys)<br /><br />try:<br />    conn = pymssql.connect(host="127.0.0.1", user="sa", password="123", database="MySchool",charset="utf8")<br />except pymssql.OperationalError as msg:<br />    print("error: Could not Connection SQL Server!please check your dblink configure!")<br />    sys.exit()<br />else:<br />    cur = conn.cursor()<br /><br />def main():<br />    for n in range(0, 10):<br />        count = n*25<br />        url = 'https://movie.douban.com/top250?start='+str(count)<br />        j = 1<br />        # if(n == 7):<br />        #     j = 5<br />        for i in range(j, 26):<br />            driver = webdriver.PhantomJS(desired_capabilities=headers)  # 封装浏览器信息<br />            driver.set_page_load_timeout(15)<br />            driver.get(url)  # 加载网页<br />            # data = driver.page_source  # 获取网页文本<br />            # driver.save_screenshot('1.png')  # 截图保存<br /><br />            name = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[0].text.replace('\'', '')<br />            ename = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[1].text.replace("/", "").replace(" ", "").replace('\'', '')<br />            try:<br />                otherName = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/a/span")[2].text.lstrip(' / ').replace("/", "|").replace(" ", "").replace('\'', '')<br />            except:<br />                otherName = ''<br />            info = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p")[0].text.replace("/", "|").replace(" ", "").replace('\'', '')<br />            score = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[2]")[0].text.replace('\'', '')<br />            number = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/div/span[4]")[0].text.replace("人评价", "").replace('\'', '')<br />            remark = driver.find_elements(By.XPATH, "//ol/li["+str(i)+"]/div/div/div/p/span")[0].text.replace('\'', '')<br /><br />            sql = "insert into Movies(Name,EName,OtherName,Info,Score,Number,Remark) values('"+name + \<br />                "','"+ename+"','"+otherName+"','"+info + \<br />                "','"+score+"','"+number+"','"+remark+"') "<br />            try:<br />                cur.execute(sql)<br />                conn.commit()<br />                print("第"+str(n)+"页,第"+str(i)+"条电影信息新增成功")<br />                time.sleep(30)<br />            except:<br />                conn.rollback()<br />                print("新增失败:"+sql)<br />            driver.quit()<br /><br />if __name__ == '__main__':<br />    main()<br />

  复制代码成果展示:

  

  

<strong style="outline: 0px;font-size: 16px;letter-spacing: 0.544px;word-spacing: 1.6px;text-align: center;white-space: pre-wrap;"><strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.544px;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●</strong>视频教程:0基础快速入门到精通</strong><strong style="outline: 0px;white-space: pre-wrap;letter-spacing: 0.544px;word-spacing: 1.6px;">●基础:</strong>20天学会Python基础●爬虫:20天学会Python爬虫<strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 0.544px;text-align: center;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●数据分析:</strong>20天学会Python数据分析<strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.544px;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●</strong>办公自动化20天学会Python办公自动化<strong style="outline: 0px;font-family: -apple-system, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 15px;letter-spacing: 0.544px;white-space: normal;word-spacing: 1.6px;caret-color: rgb(62, 62, 62);">●</strong>实战案例100个Python实战案例●趣味干货用Python分析股市,练练手Python实*敏*感*词*币20行Python代码,无损压缩千百张图片!<br style="outline: 0px;" />进来看冰冰!用Python写了一个青年大学习提醒系统<br style="outline: 0px;" />Python制作进度条,原来有这么多方法

  -END-Python 专栏关于 Python 都在这里

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线