之前一直都听过抓包,抓包,但是一直没有在手机上抓过包,这次一试,当做是一次小练习,在网上有挺多Fiddler安装和配置的教程的,我也找了一些,大家可以借鉴:
1、Fiddler|Fiddler安装与配置
2、抓包工具Fidder详解(主要来抓取Android中app的请求)
3、使用Fiddler抓到包后分析
之前在安装配置Fiddler的过程中因为使用某国产手机的原因无法使用代理被狠狠坑了一下,在此留个记号。
这次想练习的是今日头条新闻《跳楼产妇聊天记录曝光 丈夫:出事前未察觉她有情绪异常》 此新闻的相关评论信息。可以看到在PC端只是显示几条评论信息,所以就去爬移动端。
打开Fiddler,并且在手机上打开评论信息,不断下拉,可以看到评论会慢慢地加载出来,通过Fiddler的过滤功能,可以看到:
左侧这几条就是我们要找的相关的含有评论信息的链接,右上方是request,右下方是response。从右上上可以看出是正常的get方式的请求,返回的是JSon格式的数据。
这个URL很长,看着很晕,我就把这个URL复制到TXT文件下对比一下:
这个规律还是比较好找的,通过我不断对评论页的下拉,只有最后的offset参数按照20的整数倍发生改变,利用这个规律就可以构建URL进行模拟的请求。当然这个URL太长了可以进行适当的缩减,里面有一些是设备的参数,可以进行删除,然后在浏览器上试一试看能不能返回相关的信息,最后我构建的URL:https://ic.snssdk.com/article/v2/tab_comments/?resolution=640*960&aggr_type=1&count=20&group_id=6462587303142359566&item_id=6462587303142359566&offset={}。
但是在对offset赋值的时候最多只能取到1500,再往后取是没有返回评论信息的结果的,也就是说只能够得到一千多条的评论信息。
接下来就可以进行编写代码了:
toutiao.py:
import scrapy
import json
from toutiao_chanfu.items import ToutiaoChanfuItem
class ToutiaoSpider(scrapy.Spider):
name = 'toutiao'
start_urls = ['https://ic.snssdk.com/article/v2/tab_comments/?resolution=640*960&aggr_type=1&count=20&group_id=6462587303142359566&item_id=6462587303142359566&offset={}'.format(i*20) for i in range(0,76)]
def parse(self, response):
item=ToutiaoChanfuItem()
html=response.text
if html:
content=json.loads(html)
if content:
datas=content.get("data")
if datas:
for data in datas:
comment=data.get("comment")
if comment:
item['user_name']=comment.get("user_name")
item['text']=comment.get("text")
# print(item['user_name']+':'+item['text']+'\n')
yield item
settings.py:
SPIDER_MODULES = ['toutiao_chanfu.spiders']
NEWSPIDER_MODULE = 'toutiao_chanfu.spiders'
MONGO_URI='localhost'
MONGO_DB='chanfuissue'
HTTPERROR_ALLOWED_CODES = [400]
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3
COOKIES_ENABLED = False
DEFAULT_REQUEST_HEADERS = {
'Accept': '*/*',
'Accept-Language': 'zh-Hans;q=1, en;q=0.9, zh-Hant;q=0.8, fr;q=0.7, de;q=0.6, ja;q=0.5',
'Host: ic.snssdk.com'
'Proxy-Connection':'keep-alive',
'Cookie':'CNZZDATA1263676333=1053471997-1506224751-%7C1506224751; install_id=15419404350; qh[360]=1; ttreq=1$81cf78bc9e126dbc3f1e1a22789fdc99f9039157; UM_distinctid=15eb20c9b0da-0f7a55db4-3d5b614e-25800-15eb20c9b102e',
'X-SS-Cookie':'CNZZDATA1263676333=1053471997-1506224751-%7C1506224751; install_id=15419404350; qh[360]=1; ttreq=1$81cf78bc9e126dbc3f1e1a22789fdc99f9039157; UM_distinctid=15eb20c9b0da-0f7a55db4-3d5b614e-25800-15eb20c9b102e',
'Connection':'keep-alive',
'User-Agent':'News/6.3.4 (iPhone; iOS 7.0.3; Scale/2.00)',
}
ITEM_PIPELINES = {
'toutiao_chanfu.pipelines.MongoPipeline': 200,
}
成功运行后是这样的:
前几次运行的时候都会出现400、502的状态码也不知是哪里抽风,后面直接卡死(伤不起的电脑啊)后面我索性直接掐掉重新运行Pycharm。
最后的结果是存储在Mongodb数据库:
一共共抓取到了1400多条的评论信息。