python3网络爬虫爬取进日头条代码

import requests #1
from urllib.parse import urlencode #2
from requests import codes #3
import os #4
from hashlib import md5 #5
from multiprocessing.pool import Pool #6
import re #7


def get_page(offset): #8
    params={
        'aid':'24',
        'app_name':'web_search',
        'offset':offset,
        'format':'json',
        'keyword':'街拍',
        'autoload':'true',
        'count':'20',
        'en_qc':'1',
        'cur_tab':'1',
        'from':'search_tab',
        'pd':'synthesis'
    } #9

    base_url='https://www.toutiao.com/api/search/content/?' #10
    url=base_url+urlencode(params) #11
    try:  #12
        resp=requests.get(url) #13
        print(url) #14
        if 200==resp.status_code: #15
            print(resp.json()) #16
            return resp.json() #17
    except requests.ConnectionError: #18
        return None #19

def get_images(json): #20
    if json.get('data'): #21
        data=json.get('data') #22
        for item in data: #23
            if item.get('cell_type') is not None: #24
                continue #25
            title=item.get('title') #26
            images=item.get('image_list') #27
            for image in images: #28
                origin_image=re.sub("list","origin",image.get('url')) #29
                yield{
                    'image':origin_image,
                    'title':title
                } #30

print('succ') #31

def save_image(item): #32
    img_path='img'+os.path.sep+item.get('title') #33
    print('succ2') #34
    if not os.path.exists(img_path): #35
        os.makedirs(img_path) #36
    try:
        resp=requests.get(item.get('image')) #37
        if codes.ok==resp.status_code: #38
            file_path=img_path+os.path.sep+'{file_name}.{file_suffix}'.format(
                file_name=md5(resp.content).hexdigest(),
                file_suffix='jpg') #39
            if not os.path.exists(file_path): #40
                print('succ3') #41
                with open(file_path,'wb')as f: #42
                    f.write(resp.content) #43
                print('Downloaded image path  is %s' % file_path)#44
                print('succ4') #45
            else: #46
                print('Already Downloaded',file_path) #47
    except requests.ConnectionError: #48
        print('Falied to Save Image,item %s' % item) #49

def main(offset): #50
    json=get_page(offset) #51
    for item in get_images(json): #52
        print(item) #53
        save_image(item) #54

GROUP_START=0 #60
GROUP_END=7 #61

if __name__=='__main__': #62
    pool=Pool() #63
    groups=([x*30 for x in range(GROUP_START,GROUP_END+1)]) #64
    pool.map(main,groups) #65
    pool.close() #66
    pool.join() #67

1.导入requests库
2.导入urlencode库
3.导入
4.导入os库
5.导入hashlib库中的md5加密
6.导入multiprocessing.poo中的多线程模块
7.导入正则表达式库
8.def定义了一个模块的变量,或者说是类的变量,称为方法
9.python大括号{ }花括号:代表dict字典数据类型,字典是由键对值组组成。冒号’:‘分开键和值,逗号’,‘隔开组.建立一个名为params的字典。
10.一个等号代表的含义是赋值,将某一数值赋给某个变量,比如a=3,将3这个数值赋予给a。即给base_url赋值。
11.当url地址含有中文,或者参数有中文的时候,这个算是很正常了,但是把这样的url作为参数传递的时候(最常见的callback),需要把一些中文甚至’/'做一下编码转换。urlencode(params)给之前的字典进行中文(服务器不识别的)进行转码。
12.异常处理try,except,这样可以放置出现一些对于用户不必要的数据。
13.r=requests.get(),requests库中发出请求的方法
14.print(url),打印出url,有助于我们判断请求的连接是否正确
15.if条件语句,如过正确就将执行下一步语句,不正确就会执行else或者返回Falied
16.对获取到的信息进行json解码,一般用法r.json()
17.return 语句就是讲结果返回到调用的地方,并把程序的控制权一起返回
程序运行到所遇到的第一个return即返回(退出def块),不会再运行第二个return。Python 函数返回值return ,函数中一定要有return 返回值才是完整的函数,如果你没有定义Python 函数返回值,那么得到一个结果是None对象,而None表示没有任何值.
18.except中放置连接错误的异常事件,便于我们清楚知道出现连接问题事件
19.返回None
20.创建get_image()函数
21.if条件语句,判断是否获取网页中的data数据
22.对获取的data数据进行json解码
23.for循环,遍寻获取到的data
24.if条件语句判断cell_type是否为空,精准的确定是否是我们需要的图片
25.continue,表示如果条件不正确的话,将一直进行该循环。可以理解为continue可以帮助我们删除不想要的数据,输出我们想要的数据。
26.给title赋值为获取到的data数据中的title
27.给images赋值为获取到的data数据中的image_list
28.for循环,遍历images
29.利用正则表达式中的sub()函数来修改文本,删除不必要的数据,将获取到的数据中的所有list替换为origin
30.返回image 和title,相当于return,但是执行到yield是停止,知道新的条件出现,同时下一次开始执行的时候从上一次结束的地方的下一位开始执行
31.打印succ确保上面的程序执行正确,如果出现succ的话就可以确定上面的程序运行完成
32.创建函数save_image()
33.赋值给img_path,os.path.sep是系统分隔符的意思,相当于/。
34.打印succ2确保上面的代码运行正确
35.os即operating system(操作系统),Python 的 os 模块封装了常见的文件和目录操作。os.path模块主要用于文件的属性获取,exists是“存在”的意思,所以顾名思义,os.path.exists()就是判断括号里的文件是否存在的意思,括号内的可以是文件路径.用if条件语句判断是否存在某个对象
36.创建一个名为img_path的文件夹
37.爬取目标网站
38.if条件语句,如果状态码为200的话就继续下一步操作
39.给file_path赋值
40.条件语句,同35
41.打印succ3确保if条件语句判断成功
42 43.新建一个名为file_path的文件并以写入的模式将文件保存为二进制模式
44.一种字符串格式化的语法, 基本用法是将值插入到%s占位符的字符串中。
%s,表示格式化一个对象为字符
“%±(正负号表示)3(数字表示字符串的长度)s”%(取代s的字符串)
%s string型 表示格式化一个对象为字符 “%s1”%S2 s1放置的是一个字符串(格式化字符串) S2放置的是一个希望要格式化的值
48.异常事件处理模块,连接错误
50.创建函数def main()
51.给json赋值
52.53.相当于实现翻页功能
60.61.定义分页起始和终止页数
62.可以认为为了调试模块,在模块导入的时候并不执行if下面的语句。

你可能感兴趣的:(python3网络爬虫爬取进日头条代码)