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

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种方式


![在这里插入图片描述](https://img-blog.csdnimg.cn/c6403aebed9c43f69b6b2d6ac394f528.png)


### 爬虫实例演示


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



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


![在这里插入图片描述](https://img-blog.csdnimg.cn/2d9382e39dd54a1d94d7083b5a436fd2.png)  
 开发工具采用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规则如下,以此类推。  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8f17b7c81fd2410fb1acfd0c6a34c640.png)  
 接着,再对网页源码进行分析:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/559b4d5ad5134a74b92d381021817c58.png)  
 最后,编写爬虫脚本:



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()
复制代码


成果展示:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/bcfc76c8776c4bc6a05dc93b1e6ef9ed.png)


### 最后


**作为一个IT的过来人,我自己整理了一些python学习资料,都是别人分享给我的,希望对你们有帮助。**  
 **学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。**


**朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】**。



### 最后

不知道你们用的什么环境,我一般都是用的Python3.6环境和pycharm解释器,没有软件,或者没有资料,没人解答问题,都可以免费领取(包括今天的代码),过几天我还会做个视频教程出来,有需要也可以领取~  

给大家准备的学习资料包括但不限于:  

Python 环境、pycharm编辑器/永久激活/翻译插件  

python 零基础视频教程  

Python 界面开发实战教程  

Python 爬虫实战教程  

Python 数据分析实战教程  

python 游戏开发实战教程  

Python 电子书100本  

Python 学习路线规划

![](https://img-blog.csdnimg.cn/d29631674929476f9c3b30f7ff58dff0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70)




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值