开发环境
- Python第三方库:lxml、Twisted、pywin32、scrapy
- Python 版本:python-3.5.0-amd64
- PyCharm软件版本:pycharm-professional-2016.1.4
- 电脑系统:Windows 10 64位
如果你还没有搭建好开发环境,请到这篇博客。
- 本文中的源代码在github这里:https://github.com/AoboJaing/thirdDemo/
本篇博文的重点内容:
- 有一些数据,在源码上找不到的,这个时候需要使用 — 抓包。
- Python调用MySQL数据库
本爬虫项目的目的是:某个关键字在淘宝上搜索到的所有商品,获取所有商品的: 商品名字、商品链接、商品价格、商品的评论。
开始实战
创建一个爬虫项目
scrapy startproject thirdDemo
设置防反爬机制(settings.py 文件)
请参考这篇博客:给 Scrapy 爬虫项目设置为防反爬。
分析网站
- 分析网页界面
- 分析网址结构
- 分析网页源代码
1 . 分析网页界面:
我们在淘宝网的搜索栏里面搜索关键字,比如“小吃”。它一共会输出100页。
可见:100页的搜索结果是淘宝的上限。(最多100页)
2 . 分析网址结构:
当我们点击页面进行浏览时,我们发现不同的页面的网址有规律,并且下面是我们找到的规律:
- 红色部分是一模一样的。
- 删除红色部分,将剩下的组成网址,一样可以正常的浏览原网页。
q=
后面是“小吃”的编码形式。s=
后面的数值等于44*(当前页面-1)
开始写爬虫程序(taobao.py 文件)
创建一个爬虫文件(taobao.py 文件)
cd thirdDemo
scrapy genspider -t basic taobao taobao.com
使用PyCharm软件开发,使用PyCharm软件打开 thirdDemo项目。
添加需要使用的存储容器对象(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
得到搜索关键字对应的所有搜索页面(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
(注意:我们上面通过观察网页已经知道了,搜索得到的页面有100页,但是我们现在是测试阶段,不爬这么多页,上面的代码我们只爬了2页)
运行一下: