爬虫必学编程,教你五分钟拿下Python爬虫,让工作更顺心。

什么是爬虫

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

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

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

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

爬虫的基本原理

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

为了帮助大家更轻松的学好Python,我给大家分享一套Python学习资料,希望对正在学习的你有所帮助!

获取方式:关注并私信小编 “ 学习 ”,即可免费获取!

爬虫必学编程,教你五分钟拿下Python爬虫,让工作更顺心。_第1张图片

爬虫工具和语言选择

一、爬虫工具

工欲善其事必先利其器的道理相信大家都懂的,想要提升效率,一些常用的工具是必不可少的,以下就是个人推荐的几款工具: 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
复制代码

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

最后,编写爬虫脚本:

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爬虫,让工作更顺心。_第2张图片

你可能感兴趣的:(python,编程语言,大数据,人工智能)