10行代码抓取公众号文章评论,有点煽情?如果我告诉你它是用Python实现的,你可能会相信,因为Python确实非常强大。只需要几行代码就可以编写一个简单的爬虫。这次我们是爬取微信数据,比较麻烦。这里讨论的是如何自己爬取后面文章的评论公众号。有人说别人的文章可以爬取?理论上是可以的,但是你可以抓取你能看到的一切。不过,本文讨论的是自己的文章,思路是相通的,希望本文能给大家一些启发。1、获取cookies是因为你在抓取自己微信文章中的评论。首先,您需要登录公众号后台。登录后可以看到文章的评论。登录将涉及cookie。数据。所以第一步是获取cookie信息。打开Chrome浏览器,会看到发送请求时cookie信息会自动发送到微信。我们将复制这段cookie数据,并使用Python构建一个cookie对象用于请求。fromhttp.cookiesimportSimpleCookieraw_cookie="gsScrollPos-5517=;...bizuin=2393828"cookie=SimpleCookie(raw_cookie)requests_cookies=dict([(c,cookie[c].value)forcinccookie])r=requests.get(url,cookies=requests_cookies)2.构造URL打开任意一篇文章的评论列表,你会发现它的URL结构非常清晰,根据名字基本可以判断出各个参数的含义。这里比较重要的参数是begin,它作为分页的起始位置。事实上,它应该是固定的。url="https://mp.weixin.qq.com/misc/appmsgcomment?"\"action=list_comment&"\"mp_version=7&"\"type=0&"\"comment_id=2881104117&"\#评论文章ID"begin=0&"\#分页参数"count=10&"\#每次返回10条评论"token=1300595798&"\"lang=zh_CN"3.抓取数据清除cookies和URL后,就可以抓取模拟浏览器数据并清理了。我开始考虑使用BeautifulSoup来解析网页,但没有成功。找到原因了,将爬取的页面保存为html文件,在html源码文件中查找评论中的关键词,发现评论不在div标签中,而是存在于一个JS代码块中,看起来像JSON数据,看起来数据是在本地用JavaScript渲染后显示出来的。于是改用正则表达式,截取需要的数据,最后存入数据库。完成它需要大约10个代码。defmain():#普通消息,选中消息总数normal_count,selected_count=141,100#普通消息urlnormal_url="https://mp.weixin.qq.com/misc/appmsgcomment?"dd=dict([(normal_count,selected_url)])fork,vindd.items():crawler(k,v)defcrawler(count,url):foriinrange(0,count,10):r=requests.get(url.format(begin=i),cookies=requests_cookies)match=re.search(r'"comment":(\[\{.*\}\])',r.text,re.S)ifmatch:data=json.loads(match.group(1),encoding="utf-8")conn.insert_many(data)time.sleep(1)【本文为专栏作家“刘志军”原创文章,作者微信公众号:Python之禅(VTtalk)】点此查看作者更多好文
