Python3 大型网络爬虫实战 004 — scrapy 大型静态商城网站爬虫项目编写及数据写入数据库实战 — 实战:爬取淘宝

原博文链接:http://www.aobosir.com/blog/2016/12/26/python3-large-web-crawler-taobao-com-import-to-MySQL-database/


开发环境

  • Python第三方库:lxml、Twisted、pywin32、scrapy
  • Python 版本:python-3.5.0-amd64
  • PyCharm软件版本:pycharm-professional-2016.1.4
  • 电脑系统:Windows 10 64位

如果你还没有搭建好开发环境,请到这篇博客


本篇博文的重点内容:

  • 有一些数据,在源码上找不到的,这个时候需要使用 — 抓包。
  • Python调用MySQL数据库

本爬虫项目的目的是:某个关键字在淘宝上搜索到的所有商品,获取所有商品的: 商品名字、商品链接、商品价格、商品的评论。


开始实战

创建一个爬虫项目

scrapy startproject thirdDemo

Alt text

设置防反爬机制(settings.py 文件)

请参考这篇博客:给 Scrapy 爬虫项目设置为防反爬

分析网站

  • 分析网页界面
  • 分析网址结构
  • 分析网页源代码

1 . 分析网页界面:

我们在淘宝网的搜索栏里面搜索关键字,比如“小吃”。它一共会输出100页。

可见:100页的搜索结果是淘宝的上限。(最多100页)

Alt text

2 . 分析网址结构:

当我们点击页面进行浏览时,我们发现不同的页面的网址有规律,并且下面是我们找到的规律:

  1. 红色部分是一模一样的。
  2. 删除红色部分,将剩下的组成网址,一样可以正常的浏览原网页。
  3. q= 后面是“小吃”的编码形式。
  4. s= 后面的数值等于 44*(当前页面-1)

Alt text

开始写爬虫程序(taobao.py 文件)

创建一个爬虫文件(taobao.py 文件)

cd thirdDemo
scrapy genspider -t basic taobao taobao.com

Alt text

使用PyCharm软件开发,使用PyCharm软件打开 thirdDemo项目。

Alt text

添加需要使用的存储容器对象(items.py文件)

先到 items.py 文件里面的ThirddemoItem()函数里面创建存储用到容器(类的实例化对象)

class ThirddemoItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    title = scrapy.Field()
    link = scrapy.Field()
    price = scrapy.Field()
    comment = scrapy.Field()
    pass

Alt text

得到搜索关键字对应的所有搜索页面(taobao.py文件)

在回调函数parse()中,建立一个变量(key)来存储关键词(零食)。然后在使用一个for循环来爬取所有的网页。然后使用scrapy.http里面的Request 来在parse()函数返回(返回一个生成器(yield))一个网页源代码:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request

class TaobaoSpider(scrapy.Spider):
    name = "taobao"
    allowed_domains = ["taobao.com"]
    start_urls = ['http://taobao.com/']

    def parse(self, response):
        key = '小吃'
        for i in range(0, 2):
            url = 'https://s.taobao.com/search?q=' + str(key) + '&s=' + str(44*i)
            print(url)
            yield Request(url=url, callback=self.page)
        pass

    def page(self, response):
        pass

Alt text

(注意:我们上面通过观察网页已经知道了,搜索得到的页面有100页,但是我们现在是测试阶段,不爬这么多页,上面的代码我们只爬了2页)


运行一下:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值