php 爬虫抓取网页数据(蜘蛛来说触手可及的开发爬虫实例:开发实例的步骤 )
优采云 发布时间: 2022-02-14 13:03php 爬虫抓取网页数据(蜘蛛来说触手可及的开发爬虫实例:开发实例的步骤
)
一、什么是爬虫:
爬虫,即网络爬虫,可以理解为在互联网上爬行的蜘蛛。互联网就像一张大网,爬虫就是在这张网上四处爬行的蜘蛛。如果遇到资源,就会被抢。你想抢什么?由你来控制它。
例如,它正在抓取网页。在这个网页中,它找到了一条路,这条路实际上是一个指向网页的超链接。然后它可以爬到另一个网站来获取数据。这样一来,整个互联网络对这只蜘蛛来说触手可及,分分钟爬下来也不是问题。
二、基本的主调度器:
整体爬虫调度器会用到url管理器、html下载器、解析器、导出器;简单爬虫架构:爬虫调度器,监控运行,URL管理器(待爬,已经爬)->网页下载器(下载指定URL,保存为字符串)->网页解析器(一方面抓取有价值的数据,另一方面,在 URL 管理器中添加新 URL)
三、开发爬虫示例:
一、步骤
1、定位:确定要从哪个 网站 页面抓取数据的哪一部分。本示例确定百度百科的python入口页面及其相关入口页面的标题和介绍。
2、分析目标:确定捕获数据的策略。首先是分析要爬取的目标页面的URL格式,用来限制要爬取的页面范围;二是分析待爬取数据的格式。在这个例子中,标题和介绍所在标签的格式;三是分析页面的代码,在网页解析器中指定页面的代码以正确解析。
3、编写代码:解析目标步骤得到的爬取策略的结果会在解析器中使用。
4、执行爬虫。
四、开始使用爬虫
1、网址解析器:
管理要爬取和已经爬取的url
2、HTML 下载器
urllib2,请求:
3、解析器
网页解析器:从网页中提取有价值的数据,将网页下载器获取的Hmlt字符串解析为有价值的数据和新的URL。最常用的解析器是beautifulsoup,
4、出口商
下面是一个抓取meizit的爬虫示例:
import requests ##导入requests
from bs4 import BeautifulSoup ##导入bs4中的BeautifulSoup
import os
headers = {'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1"}##浏览器请求头(大部分网站没有这个请求头会报错、请务必加上哦)
all_url = 'http://www.mzitu.com/all' ##开始的URL地址
start_html = requests.get(all_url, headers=headers) ##使用requests中的get方法来获取all_url(就是:http://www.mzitu.com/all这个地址)的内容 headers为上面设置的请求头、请务必参考requests官方文档解释
Soup = BeautifulSoup(start_html.text, 'lxml') ##使用BeautifulSoup来解析我们获取到的网页(‘lxml’是指定的解析器 具体请参考官方文档哦)
all_a = Soup.find('div', class_='all').find_all('a') ##意思是先查找 class为 all 的div标签,然后查找所有的<a>标签。
for a in all_a:
title = a.get_text() #取出a标签的文本
path = str(title).strip() ##去掉空格
os.makedirs(os.path.join("D:\mzitu", path)) ##创建一个存放套图的文件夹
os.chdir("D:\mzitu\\"+path) ##切换到上面创建的文件夹
print(u'当前的文件夹为',path)
if not path:
print('爬取完毕!')
break
href = a['href'] #取出a标签的href 属性
html = requests.get(href, headers=headers) ##上面说过了
html_Soup = BeautifulSoup(html.text, 'lxml') ##上面说过了
max_span = html_Soup.find('div', class_='pagenavi').find_all('span')[-2].get_text() ##查找所有的标签获取第十个的标签中的文本也就是最后一个页面了。
coun = 1
for page in range(1, int(max_span)+1): ##不知道为什么这么用的小哥儿去看看基础教程吧
page_url = href + '/' + str(page) ##同上
img_html = requests.get(page_url, headers=headers)
img_Soup = BeautifulSoup(img_html.text, 'lxml')
img_url = img_Soup.find('div', class_='main-image').find('img')['src'] ##这三行上面都说过啦不解释了哦
name = img_url[-9:-4] ##取URL 倒数第四至第九位 做图片的名字
img = requests.get(img_url, headers=headers)
f = open(name+'.jpg', 'ab')##写入多媒体文件必须要 b 这个参数!!必须要!!
f.write(img.content) ##多媒体文件要是用conctent哦!
print(u'当前爬取',coun,u'张图片',img_url)
coun +=1
f.close()