简易爬虫的思路

看完一周python爬虫的视频,已经对爬虫的基本思路有了一定的了解。现在以爬取煎蛋网的图片并下载在本地为目标阐述爬虫的基本思路。

目标: 连续爬取并下载煎蛋网站的无聊栏目的图片

所需库:bs4模块的BeautifulSoup、requests、urllib.request

第一部分    准备工作

第一步: 我们分析一下我们所需要的元素的标签信息。

              整个网站的图片分两种:第一种是静态的图片.jpg或.png或其他相类似的静态图,第二种是.gif动态图。动态图我们暂时不需要(以后我会学怎么抓动态图),我们需要的是静态图,然后通过chrome的检查功能我们发现,所有的图片都有这样的cssPath:#comment-3769757 > div > div > div.text > p > img, 实际上我们使用 div.text > p > img就可以定位到每一张图片了。

                路径选择方法如下图: 在chrome中对网页进行检查然后选中某个标签->右键->然后如下。                                                       

第二步:我们需要的是不仅仅是一个页面的数据,我们需要的是多个页面的数据。我们针对简单的网页进行简单的分析。

              它的url格式如下:http://jandan.net/pic/page-(页码)

第二部分 正式工作

第一步: 我们导入所需要的库文件

第二步:使用requests.get(url,headers=header)方法(header是用于伪装成浏览器的字符串,具体文章如下见)将html文件down下来

参考文章:https://blog.csdn.net/Cooler_max/article/details/79193386       在使用requests库的情况下如何伪装成浏览器

第三步:  使用BeautifulSoup对下载下来的网页进行解析,然后使用select方法选取我们所需要的标签:div.text > p > img。最后使用get('src')方法将其中的网页链接取出,生成一个list。

第四步:  我们使用如下代码对取得的img网址进行下载 

        for  imgurl  in  imglist:
               #  写好你的路径
               urllib.request.urlretrieve(imgurl, 'D:\\test\\%s.jpg'  %  x,Schedule)
               + =  1

第五步: 我们返回到第二步对第二步使用的url进行修改(改页码)然后让电脑重复二三四过程,直到网页爬取完毕。



结束语: 刚开始接触python爬虫,写的东西的可能有点杂乱,逻辑性不强,大家也就随便看看,如果能帮助到大家是最好的。如果有错误也希望大家能够指正。

附一个写好的例子(目标网址 : https://weheartit.com)

from bs4 import BeautifulSoup
import requests
import urllib.request
import sys
import io
import time 
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding = 'gb18030')



#print(soup)   已经证明能够正常的输出 文字没有问题


path = 'C:/Users/Administrator/Desktop/img/'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36',
    'Cookie' : 'locale=zh-cn; __whiAnonymousID=8f2b8ec6e965428885d5c497f4fda3b3; __qca=P0-1916917309-1522726427209; __gads=ID=2bf79b99f08ad583:T=1522726511:S=ALNI_Ma6oCky909e_Y9U-Y6-RxAFfTuthQ; _weheartit_anonymous_session=%7B%22page_views%22%3A3%2C%22search_count%22%3A0%2C%22last_searches%22%3A%5B%5D%2C%22last_page_view_at%22%3A1523349133807%7D; auth=no; _whisession=b5ed7f4417adfbd20a91c5745a874dbb; _ga=GA1.2.662950764.1522726426; _gid=GA1.2.1818819622.1523348785; _gat=1'
}

import urllib
def cbk(a, b, c):  
    '''回调函数 
    @a: 已经下载的数据块 
    @b: 数据块的大小 
    @c: 远程文件的大小 
    '''  
    per = 100.0 * a * b / c  
    if per > 100:  
        per = 100  
    print('%.2f%%' % per)
  
def get_pic(url):
    wb_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(wb_data.text, 'lxml')
# img path selector #div > div.article-info-overlay > a

    images = soup.select('div > div > a > img')
    img_urls = []
    for image in images:
        img_urls.append(image.get('src'))
        print(image.get('src'))
    return img_urls

def dl_img_url(url):
    if url is not None:
        index = url.find('?')
        if index != -1:
            str_len = len(url)
            url = url[:-(str_len-index)]
        urllib.request.urlretrieve(url,path + url.split('/')[-2] + url.split('/')[-1])
        print('Done')
    else:
        print('Url is None')

def get_more_pages(start,end):
    for one in range(start,end):
        url = 'https://weheartit.com/recent?page={}'.format(one)
        img_urls = get_pic(url)
        for img_url in img_urls:
            dl_img_url(img_url)
        time.sleep(3)

get_more_pages(1, 3)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值