python入门爬取表情包

九年义务教育加三年高考,从来没有过过这么紧张充实的暑假,生怕自己来学校了啥都没学到心慌慌,马上大二了,我慌啊,害怕小学弟学妹们进来了我却当不起这个学姐,到时候别人问我啥我 啥都不会啊;虽然我现在也感觉没学到啥,但是回想一下这个暑假做的事情心里却是极开心的;放暑假以前就计划好了做完答辩就开始进入python的学习,最后我的答辩居然耗费了我接近一个月的时间做完以后又是各种修改,在家没怎么学python,基本上python的学习就是提前几天来学校了,老老实实地呆在工作室学了下;

这是我学了python的基本语法以后进入爬虫的学习以后爬的第一个网页咧,爬了一堆表情包,过程真的不简单,照着教程敲代码各种报错,不过还好有度娘喜欢我报错直接复制黏贴百度啊,总有前人犯过一样的错误嘛,还有就是有人当面指点指点也真的是太棒了;下面先来讲具体思路:(windows系统       python 3.6)

1.引进库函数,需要引进的内容如下,若没有这些库函数直接在shell中pip install requests来下载安装就好了,其中urllib是python安装包中自带的就不需要下载了,但是版本不一样用法就不一样,我的是python3.6的,需要在urllib后面加上.request  最后的os系统操作亦不需要pip引入;

import requests//引进requests库
from bs4 import BeautifulSoup
import lxml
import urllib
import os//对电脑系统进行操作

2.获取网页路径,先前看了个教程视频里面讲了不少关于url(地址的组成的),一个及其冗长的视频,但是我硬着头皮看完了在这里也提一下吧,其实要用的时候就是直接在上面复制黏贴就好了。

url(地址):http(请求协议)://www.baidu.com(域名)/s?(资源路径)ie=utf-8&mod=1&isbd=1&isid=c2561bba000de...%..(参数)

那就提一下后面下载图片时的命名问题,我用的就是直接截取url的后半部分来命名下载下来的图片;

split_list = url.split('/')将url以/分割为几部分
 filename = split_list.pop()将最后一部分弹出

请求协议里面我们遇到的基本上就是http和https了;

http是超文本传输协议

https是http+SSL(安全套接字层);也就是说在传输前先加密,之后再解密获取内容,当然安全强度较高,自然也就耗时长了

3.实现多个网页整页抓取,想爬多个页面自然是要找他们之间的关系,也就是url的变化规律,一般就用for循环或者用range()产生随机数来获取你要爬的页面,这里获取页面的时候有的网页设置了反爬虫,解决方法就是添加header,原因就是模仿成浏览器来对目标网页发送请求,不得不说一下python的语法真的比起其他的简单太多了,人生苦短,用python说的没错呀!

def get_page(page_url):
    headers = {
        'Host': 'www.doutula.com',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
    }
    res = requests.get(page_url, headers=headers)
    soup = BeautifulSoup(res.text, 'lxml')

4.找所需获取图片的相同属性,一般来讲他们的class都是一样的,设置一个图片的列表,然后筛选出符合class特定条件的图片存入,下载图片的url。

5.将图片下载存入本地文件夹,关于图片命名的方法上面已经说了,下面来说一下两种存图片的方式

a.直接建一个images文件夹要和.py文件在同一个目录下

path = os.path.join('images',filename)

b.就无需自己建文件夹了,用if语句电脑自动帮你建立一个和python在同一个目录下的文件夹

image_path = 'images'
   if image_path not in os.listdir() :
       os.makedirs(image_path)
path = os.path.join('images', filename)

最后献上全部代码,我也是看的教程学的,可是我发现按着教程一步步敲居然也有那么多问题,版本不同就会有差异,但是第一个实战很开心啦

import requests
from bs4 import BeautifulSoup
import lxml
import urllib
import os

BASE_PAGE_URL = 'http://www.doutula.com/article/list/?page='
PAGE_URL_LIST = []


for x in range(1, 2):
    url = BASE_PAGE_URL + str(x)
    PAGE_URL_LIST.append(url)


def download_img(url):
    split_list = url.split('/')
    filename = split_list.pop()
    image_path = 'images'
    if image_path not in os.listdir() :
        os.makedirs(image_path)
    path = os.path.join('images', filename)
    urllib.request.urlretrieve(url, filename=path)


def get_page(page_url):
    headers = {
        'Host': 'www.doutula.com',
        'Upgrade-Insecure-Requests': '1',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36'
    }
    res = requests.get(page_url, headers=headers)
    soup = BeautifulSoup(res.text, 'lxml')
    img_list = soup.find_all('img', attrs={'class': 'lazy image_dtb img-responsive'})
    for img in img_list:
        url = img['data-original']
        download_img(url)


def main():
    for page_url in PAGE_URL_LIST:
        get_page(page_url)


if __name__ == '__main__':
    main()

最后温馨提示:这个网站里面的表情包有几万张,望大家下载的时候悠着点,因为我的程序一旦执行以后就停不下来了,就算我把程序关了还是停不下来,在获取网页的时候爬几页就行了,我就只爬了两页。大家瞧瞧?

猜你喜欢

转载自blog.csdn.net/qq_42179526/article/details/82312809