上一篇文章,我们已经实现抓取商品第一页的功能,下面来实现翻页的功能。

首先通过类定义三个方法:初始化方法、解析一页的方法、翻页爬取。

class jd_comment(object):
	def __init__(self):
		pass

	def page(self):
		pass

	def max_page(self):
		pass

初始化方法包括请求头、文件所在位置

	def __init__(self):
		self.headers = {
			'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
			}
		self.fp = open('shangpingolun.text', 'w', encoding='utf-8')

解析一页的方法,即是爬取一页的方法:

	def page(self, url):
		response = requests.get(url, headers=self.headers)
		# 将json转换为字典
		js_data = response.json()
		# 获取评论所在地方
		comment_list = js_data['comments']
		# 提取需要的ID及评论
		for comment in comment_list:
			id = comment.get('id')
			content = comment.get('content')
			print(content)
			self.fp.write(f'{id}\t{content}')

定义翻页爬取的方法:

	def max_page(self):
		for page_num in range(101):
			i = str(page_num)
			# 生成url
			url = f'https://club.jd/comment/productPageComments.action?callback=&productId=100010565952&score=0&sortType=5&page={i}&pageSize=10&isShadowSku=0&rid=0&fold=1'

			# 调用函数
			self.page(url=url)
	
	# 关闭文件
	def close_files(self):
		self.fp.close()
		print('done!')

注意,url里面需要修改传递页码参数为page_num

定义完上述三个方法后,接下来定义实例:

if __name__ == '__main__':
	jd_spider = jd_comment()
	jd_spider.max_page()
	jd_spider.close_files()

完整代码如下:

import requests
import time

class jd_comment(object):

	def __init__(self):
		self.headers = {
			'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
			}
		self.fp = open('shangpingolun.text', 'w', encoding='utf-8')

	def page(self, url):
		response = requests.get(url, headers=self.headers, timeout=3)
		# 将json转换为字典
		js_data = response.json()
		# 获取评论所在地方
		comment_list = js_data['comments']
		# 提取需要的ID及评论
		for comment in comment_list:
			id = comment.get('id')
			content = comment.get('content')
			print(content)
			self.fp.write(f'\t{id}\t{content}')
			
	def max_page(self):
		for page_num in range(101):
			i = str(page_num)
			# 生成url
			url = f'https://club.jd/comment/productPageComments.action?callback=&productId=100010565952&score=0&sortType=5&page={i}&pageSize=10&isShadowSku=0&rid=0&fold=1'

			# 调用函数
			self.page(url=url)
	
	# 关闭文件
	def close_files(self):
		self.fp.close()
		print('done!')

if __name__ == '__main__':
	jd_spider = jd_comment()
	jd_spider.max_page()
	jd_spider.close_files()

此外在爬取中遇到一个问题,第一次爬取成功,第二次使用时,出现下面的错误。

网上查了一下,说是JSON格式不对造成的。后来我把url链接里面的page_num 从int 改成了str,运行一次可以成功爬取,第二次又遇到上图的错误。折腾了一会儿,也没有找到解决方法。

大家知道是什么原因么?

更多推荐

python爬取京东商品评论(可实现翻页)