Advertisement

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

阅读量:

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

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

复制代码
    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.com/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
image-20201210214715696

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

复制代码
    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.com/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()

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

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

大家知道是什么原因么?

全部评论 (0)

还没有任何评论哟~