excel抓取网页数据(Python基础学习03——爬虫网站项目项目介绍及项目 )

优采云 发布时间: 2022-02-03 08:02

  excel抓取网页数据(Python基础学习03——爬虫网站项目项目介绍及项目

)

  文章目录

  3.2、获取数据

  3.3、分析数据

  3.4、保存数据

  系列文章

  Python学习01-Python基础

  Python库学习——urllib学习

  Python库学习——BeautifulSoup4学习

  Python库学习——Re正则表达式

  Python库学习——Excel存储(xlwt、xlrd)

  Python学习02——Python爬虫

  Python库学习——Flask基础学习

  Python学习03——爬虫网站项目

  二、Python爬虫1、任务介绍

  爬虫的学习以任务驱动的方式进行,最终实现了豆瓣250大电影的基本信息爬取,包括电影名称、豆瓣评分、评价数、电影摘要、电影链接等。之后会以可视化的方式展示出来,比如统计图表。

  豆瓣Top250网站:

  2、爬虫介绍

  网络爬虫是根据特定规则自动爬取互联网信息的程序或脚本。由于互联网数据的多样性和资源的有限性,根据用户需求对相关网页进行爬取和分析已成为主流的爬取策略。

  我们可以爬取我们想看的视频和各种图片,只要是可以通过浏览器访问的数据都可以用爬虫爬取。这并不是说视频网站上只有VIP才能观看的视频可以爬取,而是我们可以通过浏览器本身观看。除非启用 VIP,否则我们仍然无法访问这些特定视频。

  模拟浏览器打开网页,在网页中获取我们想要的具体数据。

  爬虫原理:因为每个网页实际上都是一个HTML,里面有各种超链接,所以爬虫跟随超链接访问下一个网页。

  3、基本流程

  通过浏览器查看和分析目标页面,了解编程的基本规范。

  通过 HTTP 库向目标站点发起请求。该请求收录其他标头和其他信息。如果服务器正常响应,会得到一个Response,就是要获取的页面内容。

  获取的内容可以是HTML、JSON等格式。在这种情况下,使用页面解析库、正则表达式等进行解析。

  保存形式多,可保存为文本、数据库或特定格式文件(Excel)

  3.1、准备

  这里我们先进入豆瓣Top250,分析一下每次翻页后的URL格式。

  第一页:

  第二页:

  第三页:

  注意:初次访问的第一页没有?top250?开始=0&过滤器=。最后的&filter=省略也可以正常访问。

  3.1.1、分析页面

  使用Charome开发者工具(按F12进入,其他浏览器类似)分析网页,在Elments下找到需要的数据位置。

  当我们点击一​​个链接时,浏览器会向服务器发出请求

  3.1.2、编码规范

  1# -*- coding:utf-8 或者 # coding=utf-8

2

3

  这样就可以在代码中收录中文,以免乱码。

  1"""

2 程序输出:

3 hello 2

4 hello 1

5 __main__的意义:

6 程序会依次调用 test(2) 和 test(1),因为python是解释型语言,会按顺序执行。

7 为了使函数调用整齐有序,我们在__main__之前定义函数,在__main__中去调用。

8 约定俗成我们都从main开始执行。

9"""

10

11def main(a):

12 print("hello", a)

13

14test(2)

15

16if __name__ == "__main__":

17 main(1)

18

19

  3.1.3、导入模块

  这里要导入的第三方模块有:bs4、re、urllib、xlwt

  在 Python 中导入第三方模块有两种方法,在命令行终端中使用 pip 或在 PyCharm 中导入。

  1import re # 正则表达式,用于文字匹配

2from bs4 import BeautifulSoup # 用于网页解析,对HTML进行拆分,方便获取数据

3import urllib.request, urllib.error # 用于指定URL,给网址就能进行爬取

4import xlwt # 用于Excel操作

5import sqlite3 # 用于进行SQLite数据库操作

6

7

  3.1.4、程序流程

  这里先说大体思路,然后一步一步实现。

  1# -*- coding = utf-8 -*-

2# @Time : 2021/7/3 6:33 下午

3# @Author : 张城阳

4# @File : main.py

5# @Software : PyCharm

6

7import re # 正则表达式,用于文字匹配

8from bs4 import BeautifulSoup # 用于网页解析,对HTML进行拆分,方便获取数据

9import urllib.request, urllib.error # 用于指定URL,给网址就能进行爬取

10import xlwt # 用于Excel操作

11import sqlite3 # 用于进行SQLite数据库操作

12

13

14def main():

15 # 豆瓣Top250网址(末尾的参数 ?start= 加不加都可以访问到第一页)

16 baseUrl = "https://movie.douban.com/top250?start="

17 # 1. 爬取网页并解析数据

18 dataList = getData(baseUrl)

19 # 2. 保存数据(以Excel形式保存)

20 savePath = ".\\豆瓣电影Top250.xls"

21 saveData(savePath)

22

23

24# 爬取网页,返回数据列表

25def getData(baseurl):

26 dataList = []

27 # 爬取网页并获取需要的数据

28 pass

29 # 对数据逐一解析

30 pass

31 # 返回解析好的数据

32 return dataList

33

34

35# 保存数据

36def saveData(savePath):

37 pass

38

39

40# 程序入口

41if __name__ == "__main__":

42 # 调用函数

43 main()

44

45

  3.2、获取数据

  Python一般使用urllib库来获取页面(Python2是urllib2,Python3集成了urllib和urllib2)。对于urllib,可以看另外一篇博客Python第三方库——urllib学习。

  1# 得到一个指定URL的网页内容

2def askURL(url):

3 # 模拟头部信息,像豆瓣服务器发送消息

4 # User-Agent 表明这是一个浏览器(这个来自谷歌浏览器F12里 Network中 Request headers的User-Agent)

5 # 每个人的用户代理可能不相同,用自己的就好。不要复制错了,否则会报418状态码。

6 head = {

7 "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"

8 }

9 # 封装头部信息

10 request = urllib.request.Request(url, headers=head)

11 html = ""

12 try:

13 # 发起请求并获取响应

14 response = urllib.request.urlopen(request)

15 # 读取整个HTML源码,并解码为UTF-8

16 html = response.read().decode("utf-8")

17 except urllib.error.URLError as e:

18 # 异常捕获

19 if hasattr(e, "code"):

20 print("状态码:", e.code)

21 if hasattr(e, "reason"):

22 print("原因:", e.reason)

23 return html

24

25

26# 爬取网页,返回数据列表

27def getData(baseurl):

28 dataList = []

29 # 爬取所有网页并获取需要的HTML源码

30 for i in range(0, 10): # 豆瓣Top250 共有10页,每页25条。 range(0,10)的范围是[0,10)。

31 url = baseurl + str(i*25) # 最终 url = https://movie.douban.com/top250?start=225

32 html = askURL(url) # 将每个页面HTML源码获取出来

33 # 对页面源码逐一解析

34 pass

35 # 返回解析好的数据

36 return dataList

37

38

  3.3、分析数据

  现在开始解析获得的 HTML 源代码。根据观察,每部电影的信息是由

  包,收录电影名、详情链接、图片链接等,需要用到正则表达式re库。关于re库,可以看我的另一篇博客,Python库学习——Re正则表达式。

  这是电影《肖申克的救赎》的 HTML:

  1

2

3 1

4

5

7

8

9

10

11

12 肖申克的救赎

13  / The Shawshank Redemption

14  / 月黑高飞(港) / 刺激1995(台)

15

16

17

18 [可播放]

19

20

21

22 导演: 弗兰克·德拉邦特 Frank Darabont   主演: 蒂姆·罗宾斯 Tim Robbins /...

23 1994 / 美国 / *敏*感*词* 剧情

24

25

26

27

28 9.7

29

30 2385802人评价

31

32

33 希望让人自由。

34

35

36

37

38

39

  下面是解析数据的代码:(为了方便观察,这里只解析第一页,把range(0, 1)改成range(0, 10)就是10页)。

<p>1# 正则表达式:.表示任意字符,*表示0次或任意次,?表示0次或1次。(.*?)惰性匹配。

2findLink = re.compile(r&#x27;<a href="(.*?)">&#x27;) # 获取电影详情链接。

3findImg = re.compile(r&#x27;

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线