python如何从零编写爬虫代码,新手教程,包教包会

目录

一、搭建爬虫框架

1、创建项目

2、导入编写爬虫代码需要的库

3、获取网站源代码

 4、提取图片源地址

 5、获取图片二进制码

 6、创建文件夹

7、写入爬取到的图片 

 8、定义main函数,调用ger_html函数

完整编码如下所示:

 二、爬取图片

1、完善框架,写入数据

2、优化代码,方便使用


一、搭建爬虫框架

1、创建项目

 创建完成后,就可以开始编写代码了

需要注意的是,不是相同版本的python也能使用此代码,在这里我使用的是虚拟环境中创建的python3.8版本。如何创建虚拟环境,可以参考之前发表的博客。

2、导入编写爬虫代码需要的库

import os
import re
import requests

3、获取网站源代码

def get_html(url,headers,params):
    response = requests.get(url,headers=headers,params=params)
    #源代码的编写方式
    response.encoding = "utf-8"
    if response.status_code == 200:
        return response.text
    else:
        print("错误")

 编写完成如下所示:                                                  

 4、提取图片源地址

#提取图片源地址
def parse_pic_url(html):
    result = re.findall('thumbURL":"(.*?)"',html,re.S)
    return result

 5、获取图片二进制码

#获取图片二进制码
def get_pic_content(url):
    response = requests.get(url)
    return response.content 

 6、创建文件夹

 #定义一个新建文件夹程序
def create_fold(fold_name):
    #异常处理
    try:
        os.mkdir(fold_name)
    except:
        print("文件夹已存在")

7、写入爬取到的图片 

def save_pic(fold_name,content,pic_name):
    with open(fold_name + "/" + str(pic_name)+".jpg","wb") as f:
        f.write(content)
        f.close()

 8、定义main函数,调用get_html函数

#定义main函数调用get_html函数
def main():
    #输入文件夹名字
    fold_name = input("请输入图片名:")
    #输入你要抓取的数量
    page_num = input("请输入你要抓取的页数")
    #调用函数,创建文件夹
    create_fold(fold_name)
    #定义图片名字
    pic_name = 1
    #构建循环.控制页面
    for i in range(int(page_num)):
        url=""
        headers = { }
        params = { }
        html = get_html(url,headers,params)
        result = parse_pic_url(html)

        #使用for循环遍历列表
        for item in result:
        #调用函数,获取二进制源码
            pic_content = get_pic_content(item)
            save_pic(fold_name,pic_content,pic_name)
            pic_name += 1
            print("正在保存第"+str(pic_name))

#执行main函数
if __name__ == '__main__':
    main()

 爬虫的编码就完成了,接下来是如何爬取到我们想要的图片教程

完整编码如下所示:

#导入相应的库
import os
import re
import requests

#获取网站源代码
def get_html(url,headers,params):
    response = requests.get(url,headers=headers,params=params)
    #源代码的编写方式
    response.encoding = "utf-8"
    if response.status_code == 200:
        return response.text
    else:
        print("错误")

#提取图片源地址
def parse_pic_url(html):
    result = re.findall('thumbURL":"(.*?)"',html,re.S)
    return result

#获取图片二进制码
def get_pic_content(url):
    response = requests.get(url)
    return response.content

def save_pic(fold_name,content,pic_name):
    with open(fold_name + "/" + str(pic_name)+".jpg","wb") as f:
        f.write(content)
        f.close()

 #定义一个新建文件夹程序
def create_fold(fold_name):
    #异常处理
    try:
        os.mkdir(fold_name)
    except:
        print("文件夹已存在")

#定义main函数调用get_html函数
def main():
    #输入文件夹名字
    fold_name = input("请输入图片名:")
    #输入你要抓取的数量
    page_num = input("请输入你要抓取的页数")
    #调用函数,创建文件夹
    create_fold(fold_name)
    #定义图片名字
    pic_name = 1
    #构建循环.控制页面
    for i in range(int(page_num)):
        url=""
        headers = { }
        params = { }
        html = get_html(url,headers,params)
        result = parse_pic_url(html)

        #使用for循环遍历列表
        for item in result:
        #调用函数,获取二进制源码
            pic_content = get_pic_content(item)
            save_pic(fold_name,pic_content,pic_name)
            pic_name += 1
            print("正在保存第"+str(pic_name))

#执行main函数
if __name__ == '__main__':
    main()

 二、爬取图片

1、完善框架,写入数据

打开百度浏览器,搜索你想要的图片名,这里以风景图片为例

右键任意位置,选择检查按钮

选择Network

刷新并下拉网页

这时候我们会发现,Network里面的数据会越来越多

我们选中一个反复出现的acjson开头的数据,再点击Response,再看到bdFmtDispNum,我们会发现该条数据包含约78000张图片,此时我们便可以选择它作为我们要爬取的对象。

我们选择Header,找到里面的Request URL,将该目录下的网址复制下来,粘贴到我们的框架里面 

具体位置在#定义main函数调用get_html函数里面,将该内容粘贴进url的括号里面,并用""将网址选中。 

之后我们选择Header,找到里面的Request Headers,将该目录下的所有数据复制下来,粘贴到我们的框架里面

具体位置在#定义main函数调用get_html函数里面,将该内容粘贴进html的括号里面,要在每个段落添加"",这样才能正常使用,如果数据本身带有"" ,我们应该使用''。具体样式如下

 接下来我们选择Payload,将Query String Parameters中的所有数据复制,粘贴到我们的框架中

 具体位置在header的后面,同样要在每个段落添加"",这样才能正常使用,如果数据本身带有"" ,我们应该使用''。这里我们还要将没有数据的代码删掉。具体样式如下

 这时,我们便可以开始爬取图片了,不过在此之前,我们还要做一些改动,便于我们更方便的爬取图片。

2、优化代码,方便使用

在params中修改三个数据

"word": fold_name,
"queryWord": fold_name,
"pn": str(int(i+1)*30),

 如图

这时,我们便能正常使用爬虫代码了

至此,教程结束,如有任何问题,可在评论区留言。 

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值