JD数据翻页抓取
前面已经做到评论分页抓取。但是JD搜索出的产品通常不止一页,我们也要对产品进行分页获取。
然后在对每个产品进行分页抓取评论。
实践
- index_page: 在这里进行搜索分页判断,如果有多个页面就 for i in range(1, int(page)) 来循环抓取
- detail_page: 这里是详情页面,跟之前的相比,优化了评论页数的判断。因为JD评论大于6页,会出现…无法获取全部的页数。
- 如果小于6页,就循环抓取 : comment_page
- 如果大于6页,就采用递归的方式。直到获取出的list为空,或者是已经到了最大100页面(JD展示maxpage是100页): comment_circle_page
Code:
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# Created on 2017-12-28 10:48:50
# Project: NB_U_JD
from pyspider.libs.base_handler import *
import re
import json
# sys print config
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import uniout
# user class import
sys.path.append(unicode("F:\\Manager\\大数据\\Code\\localgit\\python", "utf-8"))
import utils.tool
import db.notebookdb
class Handler(BaseHandler):
crawl_config = {
"headers": {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
}
}
# debug, True:save local db; otherwise save to remote db
DEBUG = True
def __init__(self):
# 搜索:华硕顽石畅玩版R414UV,按照价格排序,3000以上
search_word = "华硕顽石畅玩版R414UV"
price = "3000"
self.url = 'https://search.jd.com/Search?keyword=' + search_word + '&enc=utf-8&wq=' + search_word + '&ev=exprice_' + price + 'gt%5E&psort=1&click=0'
# comment url
self.comment_url = "https://sclub.jd.com/comment/productPageComments.action?productId="
# 翻页 url
self.turnpage_url = self.url + '&page='
# key word
self.keyword = "顽石畅玩版R414UV"
# product name
self.productName = "顽石畅玩版R414UV"
self.tool = utils.tool.Tool()
self.mysql = db.notebookdb.MySQLDBHelp(Handler.DEBUG)
TIME = 12 * 60 # 抓取频率, 有效期 (/分)
@every(minutes=TIME) # 每小时
def on_start(self):
self.crawl(self.u