php抓取网页数据(本文接下来多进程进行爬取os库介绍)

优采云 发布时间: 2022-04-16 04:06

  php抓取网页数据(本文接下来多进程进行爬取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()

  希望这个简单的小爬虫可以帮到你,如果有什么问题,我们可以和你交流!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线