一、创建Scrapy项目
在cmd中输入一下指令创建一个新的scrapy项目及一个爬虫
scrapy startproject JD_Goods
cd JD_Goods
scrapy genspider -t basic goods jd.com
二、容器设置
在京东商城笔记本电脑分类下进入一个商品页面,在“”规格与包装”栏下可以看见该笔记本电脑的详细信息
经过筛选,在items.py下设置下列容器(忽略我的Chinglish命名法...):
#商品名称
name = scrapy.Field()
#价格
price = scrapy.Field()
#链接
link = scrapy.Field()
#内存
internalStorage = scrapy.Field()
#CPU类型
cpuType = scrapy.Field()
#CPU型号
cpuModel = scrapy.Field()
#CPU速度
cpuSpeed = scrapy.Field()
#CPU核心
cpuCore = scrapy.Field()
#硬盘容量
diskCapacity = scrapy.Field()
#固态硬盘
SSD = scrapy.Field()
#显卡类型
GCtype = scrapy.Field()
#显示芯片
GCcore = scrapy.Field()
#显存容量
GCcapacity = scrapy.Field()
#尺寸
size = scrapy.Field()
#重量
weight = scrapy.Field()
三、爬虫编写
整个项目写完后都用到了这些库,从头开始写的时候可以先一次性import完:
from JD_goods.items import JdGoodsItem
from scrapy.http import Request
import scrapy
import urllib.request
import urllib.error
import re
import json
import pymysql
由于要得到笔记本电脑的详细信息需要进入每台笔记本电脑的单独的页面,所以我选择在第一次请求的时候将所有笔记本电脑的链接爬取到链表中。首先分析每一页的url规律,发现规律为:
url = "https://list.jd.com/list.html?cat=670,671,672&page=" + str(页码) + "&sort=sort_totalsales15_desc&trans=1&JL=6_0_0#J_main"
然后分析页面中包含末尾页数的信息,用正则表达式提取:
def start_requests(self):
#TOTAL为总页数
url = "https://list.jd.com/list.html? cat=670,671,672&page=1&sort=sort_totalsales15_desc&trans=1&JL=6_0_0#J_main"
TOTAL = int(re.findall('<em>共<b>(.*?)</b>',urllib.request.urlopen(url).read().decode('utf-8','ignore'))[0])
所以用以下代码将url链接存入list中:
self.links = []
for i in range(1, 21):
try:
url = "https://list.jd.com/list.html?cat=670,6