php 爬虫抓取网页数据(蜘蛛来说触手可及的开发爬虫实例:开发实例的步骤 )

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

  php 爬虫抓取网页数据(蜘蛛来说触手可及的开发爬虫实例:开发实例的步骤

)

  一、什么是爬虫:

  爬虫,即网络爬虫,可以理解为在互联网上爬行的蜘蛛。互联网就像一张大网,爬虫就是在这张网上四处爬行的蜘蛛。如果遇到资源,就会被抢。你想抢什么?由你来控制它。

  例如,它正在抓取网页。在这个网页中,它找到了一条路,这条路实际上是一个指向网页的超链接。然后它可以爬到另一个网站来获取数据。这样一来,整个互联网络对这只蜘蛛来说触手可及,分分钟爬下来也不是问题。

  二、基本的主调度器:

  整体爬虫调度器会用到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()

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线