【Python高级编程】基于正则表达式的爬虫

85 阅读2分钟

【Python高级编程】:基于正则表达式的爬虫

www.bilibili.com/video/BV1pP…

一、爬虫简介

1、搜索引擎:百度,谷歌,企业内部的知识库,某些项目专项数据爬取,专业的数据爬取

2、互联网:公网(不需要授权的情况就可以浏览的内容,搜索引擎的重点),深网(需要授权才能使用的内容),暗网(非正式渠道,无法使用常规手段访问)

3、爬取互联网的公开信息,但是正常情况下,也需要遵守一个规则:robots协议:www.baidu.com/robots.txt (君子协议)

二、基本原理

1、所有和网页,均是HTML,HTML首先是一个大的字符串,可以按照字符串处理的方式对响应进行解析处理。其次,HTML本身也是一门标记语言,与XML是同宗同源,所以可以使用DOM对其文本进行处理。

2、所有的爬虫,核心基于超链接,进而实现网站和网页的跳转。给我一个网站,爬遍全世界。

3、如果要实现一个整站爬取程序,首先需要收集到站内所有网址,并且将重复网址去除,开始爬取内容并保存在本地或数据库,进行实现后续目标。

三、正则表达式实现

1、查找页面所有超链接

import re, requests
links = re.findall('<a href="(.+?)">', resp.text)
for link in links:
     print(link)

2、优化超链接并下载页面

import re, requests, time
links = re.findall('<a href="(.+?)"', resp.text)
for link in links:
    # 先根据页面特性,将一些无用的超链接进行排除
    if 'articleid' in link:
        continue
    if link.startswith('#'):
        continue
    # 对超链接进行处理,拼接出完整的URL地址
    if link.startswith('/'):
        link = 'http://www.woniunote.com' + link
    # 将页面文件保存于本地
    resp = requests.get(link)
    resp.encoding = 'utf-8'
    filename = link.split('/')[-1] + time.strftime("_%Y%m%d_%H%M%S") + '.html'
    with open(f'./woniunote/page/{filename}', mode='w', encoding='utf-8') as file:
        file.write(resp.text)

3、下载首页图片

import re, requests, time
resp = requests.get('http://www.woniunote.com/')
images = re.findall('<img src="(.+?)"', resp.text)
for image in images:
    # 处理URL地址
    if image.startswith('/'):
        image = 'http://www.woniunote.com' + image
    # 下载图片
    resp = requests.get(image)
    # suffix = image.split('.')[-1]
    filename = time.strftime("%Y%m%d_%H%M%S_") + image.split('/')[-1]
    with open('./woniunote/image/' + filename, mode='wb') as file:
        file.write(resp.content)

周末任务:

1、爬虫开发任务:爬取woniunote第10页到第20页的所有文章的标题,随机挑几篇文章,爬取文章中的图片

2、实现WoniuSales的批次功能(文件上传)

3、预习:HTML的DOM元素定位(含XPath)

4、查漏补缺:PHP、环境配置、网络协议(www.woniuxy.com/course/284,重点:TCP/IP/ARP/ICMP/HTTP)