最近看教程爬取搜狗微信文章,前边工作做好爬取ok,到了抓取每个文章的url时候出现了问题

这一串并不是文章真正的url,直接点的会弹出输入验证码,ok,去百度,吸取各个大佬的经验,得知了这只是一个未处理的url,处理过后才能得到真正的url。

具体过程(吸取前人经验总结的,百度真是个好东西):

首先这个url不是真正的url,在网页中点击标题后,会触发一个事件,这个事件会为我们在网页源代码中看到的url加上两个参数,已经有人把这个事件用python代码写出来了,也可以保存下来用execjs执行js代码获得加工后的url。加工后的url也不是真正的url,而是请求加工后的url后,返回一段js代码,这段代码会暴露出真正的url。具体分析过程可以见下边别人的博客,这里是对他们的补充(因为爬虫不断更新,或者各位大佬没说清楚的细节)。
这是他翻译的代码
r是从href属性下拿到的

def url_decode(r): url = 'https://weixin.sogou.com' + rb = random.randint(0, 99)a = url.index('url=')a = url[a + 30 + b:a + 31 + b:]url += '&k=' + str(b) + '&h=' + areturn url

别人的博客
看完后请回到这里,这里会有一些重要的补充(在最后会说明到底需要什么样的headers)。


ok

捋一下:
拿到原始url就是href里的东西,然后经过代码初步加工(加两个参数),然后请求这个url,获得返回的js代码,执行js代码获得真正的url

要注意的是访问过程中需要headers和cookie,headers要包含一项重要的参数就是

'Referer': 'https://weixin.sogou.com/weixin?query=%E9%A3%8E%E6%99%AF&type=2&page=17&ie=utf8'
这代表了这篇文章是从那一页点出去的,后边的参数page=17代表这是从17页出去的,但是你把这个17改成其他的也会出正确的结果。

这一点上篇博客的作者未说明白,就很头痛
完整代码:

import requests
import random
import execjs
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2843.400',
'Referer': 'https://weixin.sogou.com/weixin?query=%E9%A3%8E%E6%99%AF&type=2&page=78&ie=utf8',
'Cookie':'请写自己的cookie'
}#这个r是从href属性中随便找的一个
r = '/link?url=dn9a_-gY295K0Rci_xozVXfdMkSQTLW6cwJThYulHEtVjXrGTiVgS-YkygAfURZixdHSWWTpjKGkObPViAwEPVqXa8Fplpd9W1RjMz0jVEOYLI-rHUPgtBk2_TyeoA3GDJspUagW-Yy9H6-7QCE2hSaBhOGtNMj4F0FcxDoTjZybKWio3tq6IMm2GquGlhKJqAgaYZNJG8637wb_OeiFDqWh7iDLQRH83eTM7rFoCnQIl6fai6Q9VK8x6EAqg2mK506YFvY2wmPs46dn8Efgxg..&type=2&query=%E9%A3%8E%E6%99%AF'def url_decode(r): url = 'https://weixin.sogou.com' + rb = random.randint(0, 99)a = url.index('url=')a = url[a + 30 + b:a + 31 + b:]url += '&k=' + str(b) + '&h=' + areturn url
url = url_decode(r)resp = requests.get(url,headers=headers)print(resp.content.decode('utf8'))

结果:

用execjs处理一下就可以了

js_code = resp.content.decode('utf8')comment = re.compile('<script>(.*?)</script>',re.DOTALL)js_code = 'f = function(){%s}'%(comment.findall(js_code)[0].replace('window.location.replace(url)','return url;'))print(execjs.compile(js_code).call('f'))

其中js_code就是网页返回值
处理完后打印出的就是正确的url

搜狗微信文章url解码相关推荐

  1. 爬取搜狗微信文章笔记1

    爬取搜狗微信文章笔记1 错误1 ```pythonprint('https://weixin.sogou.com'+index) TypeError: can only concatenate str ...

  2. 搜狗微信文章爬取(中)

    GitHub: https://github.com/utopianist/SougouWeixin 前言 上节,我们已经成功构造了包含参数 SNUID 的 Cookie 池,这节我们将正式爬取 we ...

  3. python爬虫——使用xpath爬取搜狗微信文章

    缺点:爬取一定数量之后会出现验证码,导致不能继续爬取,需要更换ip才可以继续爬取,或者在浏览器重新输入验证码之后复制cookie后方能继续爬取. import requests from fake_u ...

  4. 使用redis所维护的代理池抓取微信文章

    搜狗搜索可以直接搜索微信文章,本次就是利用搜狗搜搜出微信文章,获得详细的文章url来得到文章的信息.并把我们感兴趣的内容存入到mongodb中. 因为搜狗搜索微信文章的反爬虫比较强,经常封IP,所以要 ...

  5. 搜狗微信临时链接的转换

    搜狗微信临时链接的转换 本文主要叙述的是如何获取搜狗微信的链接并转换成永久链 对搜狗微信的分析 获取uin和key来转换永久链接 通过模拟浏览器然后安装插件获取永久链接 本文主要叙述的是如何获取搜狗微 ...

  6. 使用QueryList解析微信文章

    背景:最近工作中需要做一个通过微信文章url抓取微信文章的功能,网页解析使用的是QueryList.将代码实现的逻辑记录一下. 具体实现代码如下: /*** @param $url 微信文章url* ...

  7. python爬取公众号推荐_python爬搜狗微信获取指定微信公众号的文章

    前言: 之前收藏了一个叫微信公众号的文章爬取,里面用到的模块不错.然而 偏偏报错= =.果断自己写了一个 正文: 第一步爬取搜狗微信搜到的公众号: http://weixin.sogou.com/we ...

  8. 如何用python爬取公众号文章搜狗微信搜索_python抓取搜狗微信公众号文章

    初学python,抓取搜狗微信公众号文章存入mysql mysql表: 代码: import requests import json import re import pymysql # 创建连接 ...

  9. 如何用python爬取公众号文章搜狗微信搜索_python如何爬取搜狗微信公众号文章永久链接的思路解析...

    这篇文章主要介绍了python如何爬取搜狗微信公众号文章永久链接的思路解析 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧. 本文主要讲解思路,代码部分请自行解决搜狗微信 ...

  10. 基于搜狗微信爬取微信公众号的文章

    1. 引入模块和函数 from requests_html import HTMLSession from urllib.parse import urlparse, parse_qs import ...

最新文章

  1. std::map char*做key
  2. python用途与前景-java和Python的前景谁更好
  3. Android的按钮单击事件及监听器的实现方式
  4. springboot学习笔记一(从maven项目到springboot)
  5. SAP Spartacus CORS 设置
  6. jsf 自定义属性_必填字段的自定义JSF验证器
  7. div自动滚动_从手机滚动丢帧问题,学习浏览器合成与渲染层优化
  8. Amoeba 实现Mysql的读写分离
  9. 如何使用Java语言实现一个网页爬虫
  10. Not enough information to list image symbols. Not enough information to list load addresses in ...
  11. 计算机名、有线网卡mac地址、无线网卡mac地址
  12. php 微信支付md5签名,微信支付V3支付签名无效解决方案
  13. Java中的equals和==比较
  14. 看这里→大数据工程技术人员系列课程—《大数据工程技术人员-大数据基础技术》正式上线!...
  15. ZYNQ-7000概述
  16. 几个著名的3D测试场景与模型
  17. mysql强制走索引
  18. 数据库常用的命令讲解
  19. 《权威指南》笔记 - 8.8函数式编程
  20. [PPT]用PPT来做2019苹果发布会演示文稿【附源文件下载】

热门文章

  1. NAL聚合包(STAP-A)
  2. Excel数据分析高级技巧②——数据透视表(组合/切片器/计算字段/数据透视图/条件格式)
  3. ARQ协议与滑动窗口协议
  4. 生物信息分析中的reads是什么
  5. RockWare RockWorks 17.0.0 1CD地表数据可视化软件
  6. 淘宝/天猫获得淘口令真实url API
  7. paypal java sdk_PayPal-Java SDK /信用卡付款问题
  8. Java代理模式概述及应用场景
  9. linux下常用的dns软件,Linux常见应用--DNS服务器常见应用实现
  10. 怎么把一张暗的照片调亮_美图秀秀教你批量将偏暗的照片提亮