导航:首页 > 编程语言 > python爬取超话用户

python爬取超话用户

发布时间:2022-07-26 19:16:02

⑴ 如何通过python调用新浪微博的API来爬取数据

先上结论,通过公开的api如果想爬到某大v的所有数据,需要满足以下两个条件:
1、在你的爬虫开始运行时,该大v的所有微博发布量没有超过回溯查询的上限,新浪是2000,twitter是3200。
2、爬虫程序必须不间断运行。
新浪微博的api基本完全照搬twitter,其中接口的参数特性与底层的NoSQL密不可分,建议先看点Nosql数据库的设计理念有助于更好的理解api设计。
一般来说,如果决定爬某个大v,第一步先试获取该用户的基本信息,中间会包含一条最新的status,记下其中的id号作为基准,命名为baseId。
接口中最重要的两个参数:
since_id:返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0。
max_id:返回ID小于或等于max_id的微博,默认为0。
出于各种原因,获取statuses的接口,固定为按id降序排列(scan_index_forward=false),即最新的statuses返回在前。假设该微博第一天上线,就一个用户,发了一百条,id是1到100。而你在该用户发了第50条的时候开始运行的爬虫,即baseId=50。

⑵ python怎么爬取简书用户名

初步的思路

今天在用Scrapy写代码的时候,对网页的结构也有了大致的分析,再加上之前罗罗攀的思路,初步我是通过专题入口

热门专题

image.png

image.png

专题管理员 (一般粉丝、文章、字数、收获喜欢、这几项数据都非常漂亮)

image.png

image.png

以上红框里的数据项就是我需要爬取的字段

但是以上的思路存在一点的问题:

存在一些简书用户并不是一些热门专题的管理员,但是其人气粉丝量也很高,这个思路可能无法将这些用户爬取下来

进阶的思路

热门专题

专题关注的人

专题关注的人的动态

推荐作者 粉丝信息

image.png

image.png

image.png

优点:

数据大而全,基本包含了99%的用户(个人猜测,不严谨)

缺点:

因为许多用户不止关注一个专题,而且其中包含了大量的新注册用户(数据很多为空),并且也有大量重复数据需要去重

代码部分:

jianshu.py 还在调试阶段,待更新...

# -*- coding: utf-8 -*-

import sys
import json
import requests
import scrapy
import re
from lxml import etree
from scrapy.http import Request

reload(sys)
sys.path.append('..')
sys.setdefaultencoding('utf-8')

class jianshu(scrapy.Spider):
name = 'jianshu'
# topic_category = ['city']
topic_category = ['recommend', 'hot', 'city']
base_url = 'lections?page=%s&order_by=%s'
cookies={
'UM_distinctid': '15b89d53a930-02ab95f11ccae2-51462d15-1aeaa0-15b89d53a9489b',
'CNZZDATA1258679142': '1544557204-1492664886-%7C1493280769',
'_session_id': '%3D%3D--',
'remember_user_token':'Q3LjYwODEwNzgiXQ%3D%3D--',
'_ga': 'GA1.2.2016948485.1492666105',
'_gid': 'GA1.2.382495.1494550475',
'Hm_lpvt_': '1494550475',
'Hm_lvt_': '1494213432,1494213612,1494321303,1494387194'
}
headers = {
'Accept-Encoding': 'gzip, deflate, sdch',
'Accept - Language': 'zh - CN, zh;q = 0.8',
'Connection': 'close',
'Cookie': 'UM_distinctid=15b89d53a930-02ab95f11ccae2-51462d15-1aeaa0-15b89d53a9489b; CNZZDATA1258679142=1544557204-1492664886-%7C1493280769; remember_user_token=Q3LjYwODEwNzgiXQ%3D%3D--; _ga=GA1.2.2016948485.1492666105; _gid=GA1.2.824702661.1494486429; _gat=1; Hm_lvt_=1494213432,1494213612,1494321303,1494387194; Hm_lpvt_=1494486429; _session_id=%3D%3D--',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36',
'Host':'www.jianshu.com',
"X-Requested-With": 'XMLHttpRequest'
}

def get_total_page(self):
#获取专题总页数 包含3个字典的列表 [{"hot": xx}, {"recommend":xx}, {"city": xx}]
total_page_list = []
for order in self.topic_category:
order = order.decode('utf-8')
total_page = 100
dict = {}
for page in range(1, total_page):
url = self.base_url % (page, order)
html = requests.get(url, headers=self.headers).content
selector = etree.HTML(html)
#print html
try:
elements = selector.xpath('//*[@id="list-container"]/div[1]/div/h4/a/text()')[0]
if elements is not Exception:
continue
except Exception :
dict['total_page'] = page - 1
dict['category'] = order
break
total_page_list.append(dict)
return total_page_list

def get_topic_info(self):
#获取专题信息
topic_info_list = []
total_page_list = self.get_total_page()
base_url = self.base_url
for dict in total_page_list:
category = dict['category']
total_page = int(dict['total_page'])
for page in range(1, total_page + 1):
url = base_url % (page, category)
html = requests.get(url, headers=self.headers,cookies=self.cookies).content
selector = etree.HTML(html)
topic_href = selector.xpath('//*[@id="list-container"]')[0]
for href in topic_href:
dict = {}
topic_name = href.xpath('./div/h4/a/text()')[0]
topic_url = "www.jianshu.com" + href.xpath('./div/h4/a/@href')[0]
topic_img_url = href.xpath('./div/a/img/@src')[0]
img_num = topic_img_url.split("/")[5]
dict['topic_name'] = topic_name
dict['topic_url'] = topic_url
#
dict['img_num'] = img_num
topic_info_list.append(dict)
return topic_info_list

def get_topic_admin_info(self):
#获取管理员信息
topic_admin_info_list = []
topic_info_list = self.get_topic_info()
for d in topic_info_list:
img_num = str(d['img_num'])
base_url = "s/editors_and_subscribers" % img_num
base_url_response = requests.get(base_url, headers=self.headers, cookies=self.cookies)
json_data_base = json.loads(base_url_response.text.decode('utf-8'))
editors_total_pages = json_data_base['editors_total_pages']
for page in range(1, int(editors_total_pages) + 1):
if page == 1:
editors = json_data_base['editors']
for editor in editors:
dict = {}
dict['nickname'] = editor['nickname']
dict['slug'] = editor['slug']
topic_admin_info_list.append(dict)
else:
try:
url = "}/editors?page={}".format(img_num, page)
response = requests.get(url,headers=self.headers,cookies=self.cookies)
json_data = json.loads(response.text.decode('utf-8'))
editors = json_data['editors']
for editor in editors:
dict = {}
dict['nickname'] = editor['nickname']
dict['slug'] = editor['slug']
topic_admin_info_list.append(dict)
except Exception:
pass
return topic_admin_info_list

def get_followers_following_list(self):
# 获取管理员粉丝列表
followers_list = []
topic_admin_list = self.get_topic_admin_info()
followers_base_url = "s/%s/followers"
for dict in topic_admin_list:
url = followers_base_url % dict['slug']
headers = self.headers
headers['Referer'] = url
headers['DNT'] = '1'
response = requests.get(url, headers=headers, cookies=self.cookies).content
total_followers = re.fi

⑶ 如何用 Python 爬取社交网络

从数据库中拿出用户id列表,批量爬取一批用户id的微博数据,然后保存相应的内容到数据库中。可以动态爬取,每天开个定时启动任务,自动会爬取数据有无更新,有更新则更新数据库。
如需要爬取单个用户,注释掉那部分代码即可。
我没有用Scrapy框架,手写的,解析并不复杂,用的BS4,注意要手动登录,获取cookie。
微博反爬策略还是比较强的,用API的方式限制真的太多了,完全做不到想要什么就爬什么。
PC端的数据比较难分析,它把数据放到script标签块中,用浏览器去渲染出来的,直接抓是拿不到的,要分析script标签块。
最好爬的一种就是移动端网页,http://weibo.cn,数据格式简单,限制也少。

⑷ python可以爬取个人信息吗

只能爬取公示出来的信息,不能爬取未公示的信息

⑸ 怎样用python爬新浪微博大V所有数据

我是个微博重度用户,工作学习之余喜欢刷刷timeline看看有什么新鲜事发生,也因此认识了不少高质量的原创大V,有分享技术资料的,比如好东西传送门;有时不时给你一点人生经验的,比如石康;有高产的段子手,比如银教授;有黄图黄段子小能手,比如阿良哥哥木木萝希木初犬饼…

好吧,我承认,爬黄图黄段子才是我的真实目的,前三个是掩人耳目的…(捂脸,跑开)

另外说点题外话,我一开始想使用Sina Weibo API来获取微博内容,但后来发现新浪微博的API限制实在太多,大家感受一下:

iTerm

小问题:在我的测试中,有的时候会出现图片下载失败的问题,具体原因还不是很清楚,可能是网速问题,因为我宿舍的网速实在太不稳定了,当然也有可能是别的问题,所以在程序根目录下面,我还生成了一个userid_imageurls的文本文件,里面存储了爬取的所有图片的下载链接,如果出现大片的图片下载失败,可以将该链接群一股脑导进迅雷等下载工具进行下载。

另外,我的系统是OSX EI Capitan10.11.2,Python的版本是2.7,依赖库用sudo pip install XXXX就可以安装,具体配置问题可以自行stackoverflow,这里就不展开讲了。

下面我就给出实现代码(严肃脸)

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

  • #-*-coding:utf8-*-

    import re

    import string

    import sys

    import os

    import urllib

    import urllib2

    from bs4 import BeautifulSoup

    import requests

    from lxml import etree

    reload(sys)

    sys.setdefaultencoding('utf-8')

    if(len(sys.argv) >=2):

    user_id = (int)(sys.argv[1])

    else:

    user_id = (int)(raw_input(u"请输入user_id: "))

    cookie = {"Cookie": "#your cookie"}

    url = 'd?filter=1&page=1'%user_id

    html = requests.get(url, cookies = cookie).content

    selector = etree.HTML(html)

    pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value'])

    result = ""

    urllist_set = set()

    word_count = 1

    image_count = 1

    print u'爬虫准备就绪...'

    for page in range(1,pageNum+1):

    #获取lxml页面

    url = 'hu/%d?filter=1&page=%d'%(user_id,page)

    lxml = requests.get(url, cookies = cookie).content

    #文字爬取

    selector = etree.HTML(lxml)

    content = selector.xpath('//span[@class="ctt"]')

    for each in content:

    text = each.xpath('string(.)')

    if word_count >= 4:

    text = "%d :"%(word_count-3) +text+" "

    else :

    text = text+" "

    result = result + text

    word_count += 1

    #图片爬取

    soup = BeautifulSoup(lxml, "lxml")

    urllist = soup.find_all('a',href=re.compile(r'^mblog/oripic',re.I))

    first = 0

    for imgurl in urllist:

    urllist_set.add(requests.get(imgurl['href'], cookies = cookie).url)

    image_count +=1

    fo = open("/Users/Personals/%s"%user_id, "wb")

    fo.write(result)

    word_path=os.getcwd()+'/%d'%user_id

    print u'文字微博爬取完毕'

    link = ""

    fo2 = open("/Users/Personals/%s_imageurls"%user_id, "wb")

    for eachlink in urllist_set:

    link = link + eachlink +" "

    fo2.write(link)

    print u'图片链接爬取完毕'

    if not urllist_set:

    print u'该页面中不存在图片'

    else:

    #下载图片,保存在当前目录的pythonimg文件夹

    image_path=os.getcwd()+'/weibo_image'

    if os.path.exists(image_path) is False:

    os.mkdir(image_path)

    x=1

    for imgurl in urllist_set:

    temp= image_path + '/%s.jpg' % x

    print u'正在下载第%s张图片' % x

    try:

    urllib.urlretrieve(urllib2.urlopen(imgurl).geturl(),temp)

    except:

    print u"该图片下载失败:%s"%imgurl

    x+=1

    print u'原创微博爬取完毕,共%d条,保存路径%s'%(word_count-4,word_path)

    print u'微博图片爬取完毕,共%d张,保存路径%s'%(image_count-1,image_path)

  • ⑹ 如何用python爬取一本书的评论用户

    京东图书评论有非常丰富的信息,这里面就包含了购买日期、书名、作者、好评、中评、差评等等。以购买日期为例,使用Python + Mysql的搭配进行实现,程序不大,才100行。相关的解释我都在程序里加注了:

    京东图书评论有非常丰富的信息,这里面就包含了购买日期、书名、作者、好评、中评、差评等等。以购买日期为例,使用Python + Mysql的搭配进行实现,程序不大,才100行。相关的解释我都在程序里加注了:

    ⑺ 如何用 Python 爬取需要登录的网站

    步骤一:研究该网站

    打开登录页面

    进入以下页面 “bitbucket.org/account/signin”。你会看到如下图所示的页面(执行注销,以防你已经登录)

    仔细研究那些我们需要提取的详细信息,以供登录之用

    在这一部分,我们会创建一个字典来保存执行登录的详细信息:

    1. 右击 “Username or email” 字段,选择“查看元素”。我们将使用 “name” 属性为 “username” 的输入框的值。“username”将会是 key 值,我们的用户名/电子邮箱就是对应的 value 值(在其他的网站上这些 key 值可能是 “email”,“ user_name”,“ login”,等等)。

    2. 右击 “Password” 字段,选择“查看元素”。在脚本中我们需要使用 “name” 属性为
    “password” 的输入框的值。“password” 将是字典的 key 值,我们输入的密码将是对应的 value
    值(在其他网站key值可能是 “userpassword”,“loginpassword”,“pwd”,等等)。

    3. 在源代码页面中,查找一个名为 “csrfmiddlewaretoken” 的隐藏输入标签。“csrfmiddlewaretoken”
    将是 key 值,而对应的 value 值将是这个隐藏的输入值(在其他网站上这个 value 值可能是一个名为 “csrftoken”,“ authenticationtoken” 的隐藏输入值)。列如:“”。

    最后我们将会得到一个类似这样的字典:

    Python

    payload = {
    "username": "<USER NAME>",
    "password": "<PASSWORD>",
    "csrfmiddlewaretoken": "<CSRF_TOKEN>"
    }

    1
    2
    3
    4
    5

    payload = {
    "username": "<USER NAME>",
    "password": "<PASSWORD>",
    "csrfmiddlewaretoken": "<CSRF_TOKEN>"
    }

    请记住,这是这个网站的一个具体案例。虽然这个登录表单很简单,但其他网站可能需要我们检查浏览器的请求日志,并找到登录步骤中应该使用的相关的 key 值和 value 值。

    步骤2:执行登录网站

    对于这个脚本,我们只需要导入如下内容:

    Python

    import requests
    from lxml import html

    1
    2

    import requests
    from lxml import html

    首先,我们要创建 session 对象。这个对象会允许我们保存所有的登录会话请求。

    Python

    session_requests = requests.session()

    1

    session_requests = requests.session()

    第二,我们要从该网页上提取在登录时所使用的 csrf 标记。在这个例子中,我们使用的是 lxml 和 xpath 来提取,我们也可以使用正则表达式或者其他的一些方法来提取这些数据。

    Python

    login_url = "https://bitbucket.org/account/signin/?next=/"
    result = session_requests.get(login_url)

    tree = html.fromstring(result.text)
    authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]

    1
    2
    3
    4
    5

    login_url = "https://bitbucket.org/account/signin/?next=/"
    result = session_requests.get(login_url)

    tree = html.fromstring(result.text)
    authenticity_token = list(set(tree.xpath("//input[@name='csrfmiddlewaretoken']/@value")))[0]

    **更多关于xpath 和lxml的信息可以在这里找到。

    接下来,我们要执行登录阶段。在这一阶段,我们发送一个 POST 请求给登录的 url。我们使用前面步骤中创建的 payload 作为 data 。也可以为该请求使用一个标题并在该标题中给这个相同的 url 添加一个参照键。

    Python

    result = session_requests.post(
    login_url,
    data = payload,
    headers = dict(referer=login_url)
    )

    1
    2
    3
    4
    5

    result = session_requests.post(
    login_url,
    data = payload,
    headers = dict(referer=login_url)
    )

    步骤三:爬取内容

    现在,我们已经登录成功了,我们将从 bitbucket dashboard 页面上执行真正的爬取操作。

    Python

    url = 'https://bitbucket.org/dashboard/overview'
    result = session_requests.get(
    url,
    headers = dict(referer = url)
    )

    1
    2
    3
    4
    5

    url = 'https://bitbucket.org/dashboard/overview'
    result = session_requests.get(
    url,
    headers = dict(referer = url)
    )

    为了测试以上内容,我们从 bitbucket dashboard 页面上爬取了项目列表。我们将再次使用
    xpath 来查找目标元素,清除新行中的文本和空格并打印出结果。如果一切都运行 OK,输出结果应该是你 bitbucket 账户中的
    buckets / project 列表。

    Python

    tree = html.fromstring(result.content)
    bucket_elems = tree.findall(".//span[@class='repo-name']/")
    bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems]

    print bucket_names

    1
    2
    3
    4
    5

    tree = html.fromstring(result.content)
    bucket_elems = tree.findall(".//span[@class='repo-name']/")
    bucket_names = [bucket.text_content.replace("n", "").strip() for bucket in bucket_elems]

    print bucket_names

    你也可以通过检查从每个请求返回的状态代码来验证这些请求结果。它不会总是能让你知道登录阶段是否是成功的,但是可以用来作为一个验证指标。

    例如:

    Python

    result.ok # 会告诉我们最后一次请求是否成功
    result.status_code # 会返回给我们最后一次请求的状态

    1
    2

    result.ok # 会告诉我们最后一次请求是否成功
    result.status_code # 会返回给我们最后一次请求的状态

    就是这样。

    ⑻ 如何使用python爬取知乎数据并做简单分析

    一、使用的技术栈:
    爬虫:python27 +requests+json+bs4+time
    分析工具: ELK套件
    开发工具:pycharm
    数据成果简单的可视化分析
    1.性别分布
    0 绿色代表的是男性 ^ . ^
    1 代表的是女性
    -1 性别不确定
    可见知乎的用户男性颇多。
    二、粉丝最多的top30
    粉丝最多的前三十名:依次是张佳玮、李开复、黄继新等等,去知乎上查这些人,也差不多这个排名,说明爬取的数据具有一定的说服力。
    三、写文章最多的top30
    四、爬虫架构
    爬虫架构图如下:
    说明:
    选择一个活跃的用户(比如李开复)的url作为入口url.并将已爬取的url存在set中。
    抓取内容,并解析该用户的关注的用户的列表url,添加这些url到另一个set中,并用已爬取的url作为过滤。
    解析该用户的个人信息,并存取到本地磁盘。
    logstash取实时的获取本地磁盘的用户数据,并给elsticsearchkibana和elasticsearch配合,将数据转换成用户友好的可视化图形。
    五、编码
    爬取一个url:
    解析内容:
    存本地文件:
    代码说明:
    * 需要修改获取requests请求头的authorization。
    * 需要修改你的文件存储路径。
    源码下载:点击这里,记得star哦!https : // github . com/forezp/ZhihuSpiderMan六、如何获取authorization
    打开chorme,打开https : // www. hu .com/,
    登陆,首页随便找个用户,进入他的个人主页,F12(或鼠标右键,点检查)七、可改进的地方
    可增加线程池,提高爬虫效率
    存储url的时候我才用的set(),并且采用缓存策略,最多只存2000个url,防止内存不够,其实可以存在redis中。
    存储爬取后的用户我说采取的是本地文件的方式,更好的方式应该是存在mongodb中。
    对爬取的用户应该有一个信息的过滤,比如用户的粉丝数需要大与100或者参与话题数大于10等才存储。防止抓取了过多的僵尸用户。
    八、关于ELK套件
    关于elk的套件安装就不讨论了,具体见官网就行了。网站:https : // www . elastic . co/另外logstash的配置文件如下:
    从爬取的用户数据可分析的地方很多,比如地域、学历、年龄等等,我就不一一列举了。另外,我觉得爬虫是一件非常有意思的事情,在这个内容消费升级的年代,如何在广阔的互联网的数据海洋中挖掘有价值的数据,是一件值得思考和需不断践行的事情。

    ⑼ python怎么爬取某个人的微信朋友圈的信息

    主要思路
    从UI获取文本信息是最为简单的方法,于是应该优先逆向UI代码部分。
    逆向微信apk
    首先解包微信apk,用dex2jar反编译classes.dex,然后用JD-GUI查看jar源码。当然,能看到的源码都是经过高度混淆的。但是,继承自安卓重要组件(如Activity、Service等)的类名无法被混淆,于是还是能从中看到点东西。
    首先定位到微信APP package。我们知道这个是 com.tencent.mm。
    在 com.tencent.mm
    中,我们找到一个 ui
    包,有点意思。
    展开 com.tencent.mm.ui
    ,发现多个未被混淆的类,其中发现 MMBaseActivity直接继承自 Activity
    , MMFragmentActivity
    继承自 ActionBarActivity
    , MMActivity
    继承自 MMFragmentActivity
    ,并且 MMActivity
    是微信中大多数Activity的父类:
    public class MMFragmentActivity
    extends ActionBarActivity
    implements SwipeBackLayout.a, b.a {
    ...
    }
    public abstract class MMActivity
    extends MMFragmentActivity {
    ...
    }
    public class MMBaseActivity
    extends Activity {
    ...
    }
    现在需要找出朋友圈的Activity,为此要用Xposed hook MMActivity。
    创建一个Xposed模块
    参考 [TUTORIAL]Xposed mole devlopment,创建一个Xposed项目。
    简单Xposed模块的基本思想是:hook某个APP中的某个方法,从而达到读写数据的目的。
    小编尝试hook com.tencent.mm.ui.MMActivity.setContentView这个方法,并打印出这个Activity下的全部TextView内容。那么首先需要遍历这个Activity下的所有TextView,遍历ViewGroup的方法参考了SO的以下代码:
    private void getAllTextViews(final View v) {if (v instanceof ViewGroup) {
    ViewGroup vg = (ViewGroup) v;
    for (int i = 0; i < vg.getChildCount(); i++) {View child = vg.getChildAt(i);
    getAllTextViews(child);
    }
    } else if (v instanceof TextView ) {
    dealWithTextView((TextView)v); //dealWithTextView(TextView tv)方法:打印TextView中的显示文本}
    }
    Hook MMActivity.setContentView
    的关键代码如下:
    findAndHookMethod("com.tencent.mm.ui.MMActivity", lpparam.classLoader, "setContentView", View.class, new XC_MethodHook() {...
    });
    在findAndHookMethod方法中,第一个参数为完整类名,第三个参数为需要hook的方法名,其后若干个参数分别对应该方法的各形参类型。在这里, Activity.setContentView(View view)方法只有一个类型为 View
    的形参,因此传入一个 View.class

    现在,期望的结果是运行时可以从Log中读取到每个Activity中的所有的TextView的显示内容。
    但是,因为View中的数据并不一定在 setContentView()时就加载完毕,因此小编的实验结果是,log中啥都没有。
    意外的收获
    当切换到朋友圈页面时,Xposed模块报了一个异常,异常源从 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI这个类捕捉到。从类名上看,这个很有可能是朋友圈首页的UI类。展开这个类,发现更多有趣的东西:
    这个类下有个子类 a
    (被混淆过的类名),该子类下有个名为 gyO的 ListView
    类的实例。我们知道, ListView
    是显示列表类的UI组件,有可能就是用来展示朋友圈的列表。
    顺藤摸瓜
    那么,我们先要获得一个 SnsTimeLineUI.a.gyO的实例。但是在这之前,要先获得一个 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a的实例。继续搜索,发现 com.tencent.mm.plugin.sns.ui.SnsTimeLineUI有一个名为 gLZ
    的 SnsTimeLineUI.a
    实例,那么我们先取得这个实例。
    经过测试, com.tencent.mm.plugin.sns.ui.SnsTimeLineUI.a(boolean, boolean, String, boolean)这个方法在每次初始化微信界面的时候都会被调用。因此我们将hook这个方法,并从中取得 gLZ。
    findAndHookMethod("com.tencent.mm.plugin.sns.ui.SnsTimeLineUI", lpparam.classLoader, "a", boolean.class, boolean.class, String.class, boolean.class, new XC_MethodHook() {@Override
    protected void afterHookedMethod(MethodHookParam param) throws Throwable {XposedBridge.log("Hooked. ");
    Object currentObject = param.thisObject;
    for (Field field : currentObject.getClass().getDeclaredFields()) { //遍历类成员field.setAccessible(true);
    Object value = field.get(currentObject);
    if (field.getName().equals("gLZ")) {
    XposedBridge.log("Child A found.");
    childA = value;
    //这里获得了gLZ
    ...
    }
    }
    }
    });
    现在取得了 SnsTimeLineUI.a
    的一个实例 gLZ
    ,需要取得这个类下的 ListView
    类型的 gyO
    属性。
    private void dealWithA() throws Throwable{if (childA == null) {
    return;
    }
    for (Field field : childA.getClass().getDeclaredFields()) { //遍历属性field.setAccessible(true);
    Object value = field.get(childA);
    if (field.getName().equals("gyO")) { //取得了gyOViewGroup vg = (ListView)value;
    for (int i = 0; i < vg.getChildCount(); i++) { //遍历这个ListView的每一个子View...
    View child = vg.getChildAt(i);
    getAllTextViews(child); //这里调用上文的getAllTextViews()方法,每一个子View里的所有TextView的文本...
    }
    }
    }
    }
    现在已经可以将朋友圈页面中的全部文字信息打印出来了。我们需要根据TextView的子类名判断这些文字是朋友圈内容、好友昵称、点赞或评论等。
    private void dealWithTextView(TextView v) {String className = v.getClass().getName();String text = ((TextView)v).getText().toString().trim().replaceAll("\n", " ");if (!v.isShown())
    return;
    if (text.equals(""))
    return;
    if (className.equals("com.tencent.mm.plugin.sns.ui.AsyncTextView")) {//好友昵称
    ...
    }
    else if (className.equals("com.tencent.mm.plugin.sns.ui.SnsTextView")) {//朋友圈文字内容
    ...
    }
    else if (className.equals("com.tencent.mm.plugin.sns.ui.MaskTextView")) {if (!text.contains(":")) {
    //点赞
    ...
    } else {
    //评论
    ...
    }
    }
    }
    自此,我们已经从微信APP里取得了朋友圈数据。当然,这部分抓取代码需要定时执行。因为从 ListView中抓到的数据只有当前显示在屏幕上的可见部分,为此需要每隔很短一段时间再次执行,让用户在下滑加载的过程中抓取更多数据。
    剩下的就是数据分类处理和格式化输出到文件,受本文篇幅所限不再赘述,详细实现可参考作者GitHub上的源码。

    ⑽ 如何一个月入门Python爬虫,轻松爬取大规模数据

    链接:https://pan..com/s/1wMgTx-M-Ea9y1IYn-UTZaA

    提取码:2b6c

    课程简介

    毕业不知如何就业?工作效率低经常挨骂?很多次想学编程都没有学会?

    Python 实战:四周实现爬虫系统,无需编程基础,二十八天掌握一项谋生技能。

    带你学到如何从网上批量获得几十万数据,如何处理海量大数据,数据可视化及网站制作。

    课程目录

    开始之前,魔力手册 for 实战学员预习

    第一周:学会爬取网页信息

    第二周:学会爬取大规模数据

    第三周:数据统计与分析

    第四周:搭建 Django 数据可视化网站

    ......

    阅读全文

    与python爬取超话用户相关的资料

    热点内容
    控制面板命令行 浏览:41
    为什么空气难压缩是因为斥力吗 浏览:641
    郭天祥单片机实验板 浏览:599
    服务器有什么危害 浏览:256
    饥荒怎么开新的独立服务器 浏览:753
    文件夹变成了 浏览:560
    linuxpython绿色版 浏览:431
    怎么下载小爱同学音箱app 浏览:554
    python占位符作用 浏览:76
    javajdbcpdf 浏览:543
    php网页模板下载 浏览:192
    python试讲课pygame 浏览:409
    安居客的文件夹名称 浏览:677
    家里服务器如何玩 浏览:451
    网站源码使用视频 浏览:748
    stc89c52单片机最小系统 浏览:452
    邮件安全证书加密 浏览:416
    云服务器如何访问百度 浏览:279
    常州电信服务器dns地址 浏览:839
    用小方块制作解压方块 浏览:42