上一篇文章,我们已经实现抓取商品第一页的功能,下面来实现翻页的功能。
首先通过类定义三个方法:初始化方法、解析一页的方法、翻页爬取。
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爬取京东商品评论(可实现翻页)
发布评论