python-今日头条图片的爬取(搜索标题为汽车)

我使用的是anaconda下的scrapy库进行的爬取,具体安装过程百度之。
创建项目过程(对我这样的小白才看的步骤):
1.在想创建项目的文件夹下 按住 SHIFT 后—>点击鼠标右键——>点击在此处打开Powershell窗口
2.输入 scrapy startproject 项目名,我使用的命令是 scrapy startproject car,此处就创建一个car的文件夹
在这里插入图片描述
3.点击car->再点击car->点击spiders,进入此文件夹后可按 1 步骤再开一个dos窗口
输入 scrapy genspider 名字 网址名(网址需为www开头,不需要http://,若加http://爬取时有的地方会报错)
我使用的命令是 scrapy genspider car_spider www.toutiao.com,创建的py文件如下
在这里插入图片描述
重点来了!!!
由于头条网页使用AJAX写的,头条的爬取不能直接解析原网址,需解析api(https://www.toutiao.com/api/search/content/?offset=0&keyword=汽车)下的接口。
观察此接口下的offset在改变,从0-80。
查看方法:我用的QQ浏览器,点击F12出现下面东西
在这里插入图片描述
选择Network -》 选择preview 即可查看下截图
在这里插入图片描述
首页image的url位于data下每一小项的large_image_ur下,下两张图片拼接看可得出url位置。
查看方法如上。
在这里插入图片描述
在这里插入图片描述
知道这些就可以写程序了。
使用spyder编译器对car_spider.py文件进行编辑

import scrapy
from car.items import carItem
from urllib.parse import urlencode
import json
class CarSpiderSpider(scrapy.Spider):
#    7,8行是创建之后自带的
    name = "car_spider"
    allowed_domains = ['www.toutiao.com']
#    开始的url
    start_urls=['https://www.toutiao.com/api/search/content/?offset=0&keyword=汽车']
    def parse(self,response):
        contents = json.loads(response.text)
        if contents:
            dates = contents.get('data')#得到字典里的data值
            if not(dates is None):     
                for date in dates:
                    large_image_url = date.get('large_image_url')
#                    if not(large_image_list is None):#有的没有image_list段,跳过 
#                        for image in large_image_list:#image_list中的值不为一个,循环
                    if not(large_image_url is None):
#                        print(large_image_url)
##                            print(image_url)
                        it = carItem()
                        it['src']=[large_image_url]
                        yield it   
#       返回当前url,获取offect后的值,进行字符拼接后抓取下一页
        url = response.url
        d = int(url.split("=")[1].split("&")[0])+20
        params = {
            'autoload': 'true',
            'count': '20',
            'en_qc': '1',
            'cur_tab': '1',
            'from': 'search_tab',
            'pd': 'synthesis',
            'timestamp': '1563782026489'
        }
        next_url = 'https://www.toutiao.com/api/search/content/?offset={0}&keyword=汽车'.format(d)+ urlencode(params)
        if d <= 80:
            try:
                yield scrapy.Request(next_url,callback=self.parse,dont_filter=True)
            except:
                pass

编辑items.py文件


import scrapy


class CarItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    pass
class carItem(scrapy.Item):
#    在car_spider.py文件中会引用
    src=scrapy.Field()
	设置setting.py(在文件70行左右添加)
ITEM_PIPELINES = {
    'scrapy.pipelines.images.ImagesPipeline':1
}
#图片保存地址
IMAGES_STORE='car_picture'
#获取item中的src地址下载
IMAGES_URLS_FIELD = 'src'

示例:
在这里插入图片描述
再次在spider文件夹下打开 Powershell窗口,输入 scrapy crawl car_spider(这个名字必须是car_spider.py文件里的name,否则报错)即可进行爬取
若无报错则爬取成功。
爬取:
在这里插入图片描述
爬取成功:
在这里插入图片描述
简简单单实现此操作,没有对图片的改名操作,可使用自己编译的下载器对文件进行改名和更改下载位置。
我也是小白,写的不对的可以给留言呀,感谢观看。
运行时好像有少量报错,懒得调了,能爬取出图片来就可以了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值