php抓取网页数据(本文接下来多进程进行爬取os库介绍)
优采云 发布时间: 2022-04-16 04:06php抓取网页数据(本文接下来多进程进行爬取os库介绍)
一.本文介绍
wallhaven是获取免费图片的绝佳资源网站,而且由于网站资源是开源的,所以对我们的爬虫初学者更加友好。代码也比较短,大家可以一起看看。
二.主要内容
这里我将源码的组成部分给大家讲解一下(本文不使用多线程和多处理进行爬取)
1.首先介绍一下我们接下来会用到的库
import requests
from lxml import etree
import os
首先是众所周知的requests库,它是用来帮助我们请求网页内容的。第二行导入的库将用于清理xpath的数据内容。第三个操作系统库将用于创建文件夹。
2.下一步就是获取我们目标页面上每组照片的url
#url我们将用for循环的形式给到函数
def get_href(url,headers):
r = requests.post(url=url,headers=headers)
#进行数据清洗
et = etree.HTML(r.text)
#括号里的内容直接在网页中复制xpath即可
hrefs = et.xpath('/html/body/section/div[3]/div/div/div/a/img/@src')
index = [] #给每个网址按顺序加上索引
for q in range(1, len(hrefs)):
index.append(q)
#将索引和网址用字典进行一一对应的封装
dic = dict(zip(index,hrefs))
return dic
3.下一步是保存数据。我们将创建一个大文件夹,并将每组爬取的数据放在下面的一个小文件夹中。
def Down_data(headers):
#接收一下上边函数所传出的数据
dic = get_href(url,headers)
#处理一下由于文件夹可能重复被建而报错的异常
try:
#建一个文件夹
os.mkdir(f"E:\\爬虫\\pics\\wallhaven\\{page}")
except:
pass
#把获取到的各个图片的网址传入进行保存
for index,href in dic.items():
req = requests.get(url=href,headers=headers).content
with open(f'E:\\爬虫\\pics\\wallhaven\\{page}\\{index}.jpg',mode='wb')as f:
f.write(req)
print('正在下载',page,' ',index)
Down_data(headers)
4.上面代码完成后,传入hreders,url就可以爬取数据了
下面我们将添加一个for循环来爬取多个页面
#加上防盗链以及UA伪装
headers = {
'referer': 'https://www.so.com/s?ie=utf-8&src=hao_360so_b_cube&shb=1&hsid=e9d239476ff95ce7&q=%E6%B7%98%E5%AE%9D%E7%BD%91.',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
#通过for循环遍历出多个目标网址
for page in range(100):
url = f'https://wallhere.com/zh/user/14286?order=popular&page={page}'
三.我们把上面所有的代码结合起来,我们可以得到这个爬取的源码如下:
import requests
from lxml import etree
import os
headers = {
'referer': 'https://www.so.com/s?ie=utf-8&src=hao_360so_b_cube&shb=1&hsid=e9d239476ff95ce7&q=%E6%B7%98%E5%AE%9D%E7%BD%91.',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
for page in range(100):
url = f'https://wallhere.com/zh/user/14286?order=popular&page={page}'
def get_href(url,headers):
r = requests.post(url=url,headers=headers)
et = etree.HTML(r.text)
hrefs = et.xpath('/html/body/section/div[3]/div/div/div/a/img/@src')
index = []
for q in range(1, len(hrefs)):
index.append(q)
dic = dict(zip(index,hrefs))
return dic
def Down_data(headers):
dic = get_href(url,headers)
try:
os.mkdir(f"E:\\爬虫\\pics\\wallhaven\\{page}")
except:
pass
for index,href in dic.items():
req = requests.get(url=href,headers=headers).content
with open(f'E:\\爬虫\\pics\\wallhaven\\{page}\\{index}.jpg',mode='wb')as f:
f.write(req)
print('正在下载',page,' ',index)
Down_data(headers)
# for i in range(5):
# t = threading.Thread(target=Down_data)
# time.sleep(0.1)
# t.start()
希望这个简单的小爬虫可以帮到你,如果有什么问题,我们可以和你交流!