微信公众号上的一次爬虫

前段时间,需要在微信上的一个公众号进行登陆、并进行公众号内的操作。这篇文章主要记录通过两种方式进行模拟登陆并操作该公众号,分别为selenium以及requests两种方式。


前期准备工作

1. 利用fiddler进行手机代理的设置

由于手机查看请求不方便,因此利用fiddler进行手机代理的设置,从而在电脑端的fiddler获取到手机所有对外发起的请求,具体设置步骤如下:
1>设置fiddler允许远程计算机连接:设置允许远程计算机连接.png
2>下载fiddler证书:下载证书.png
3>在手机端导入证书,步骤为:代理、导入、手动导入,然后设置IP、端口。此时即完成fiddler手机代理的设置。

2. burpsite手机代理的设置

由于fiddler只能截取到请求,但是不能对参数进行修改,因此使用burpsite进行请求的截取以及修改。其中burpsite手机代理的设置只需要设置允许远程计算机连接,并在手机端进行代理的相应IP、端口设置即可。

此时前期工作完成,以上两部是两种方式都需要进行设置的,其中两种代理各种好处,fiddler是为了更清楚地看清公众号操作的每一个请求,从而更好地进行模拟操作;burpsite是为了修改请求的参数,从而发现请求参数中,哪些参数是重要的,并且发现那些参数修改后就可修改了登陆公众号的用户信息(也就是新用户)。

selenium进行模拟登陆操作

1. chrome进行模拟手机网页的设置
chrome是可以设置为手机网页样式的,也就是模拟手机查看网页,具体设置只需要设置两处:
chrome手机端的设置.png
其中上面是设置模拟手机的型号,设置后,也就不用进行user-agent的设置了。
在selenium内设置为:

mobile_emulation = {"deviceName": "Pixel 2 XL",
                }
options = Options()
options.add_experimental_option("mobileEmulation", mobile_emulation)
# options.add_argument("--proxy-server=http://139.224.233.9:80")
driver = webdriver.Chrome(chrome_options=options)

2. chrome修改cookie插件的设置
chrome修改cookie的插件,我使用的是EditThisCookie,进行下载安装后,可直接对cookie进行修改。
Editthicookie.png
3. 进行cookie的设置
此次进行登陆公众号并进行操作,最重要的也就是cookie,通过burpsite发现,只需要修改请求内的一个参数也就可以成功切换用户,从而进行多次操作,其实也就是cookie的改变
需要注意的是,cookie同名不同域也需要分别进行设置,slenium设置不同域的cookie的方为:

cookie1 = {'name': '.ASPXAUTH', 'domain': 'xxx','value': 'xxx',
       'httpOnly': False, 'secure': False, 'path': '/'}
cookie2 = {'name': 'JSESSIONID', 'value': 'xxx', 'domain': 'xxx',
       'httpOnly': False, 'secure': False, 'path': '/'}
driver.add_cookie(cookie1)
driver.add_cookie(cookie2)

此时逐步获取模拟点击的元素进行点击、填写的操作即可,同时循环修改cookie的关键参数,就完成了用户地切换,代码实例如下:

# wait = WebDriverWait(driver, 1)
in_activity = wait.until(
EC.presence_of_element_located((By.CSS_SELECTOR, "#enrollBtn > p"))
)
print('print(in_activity.text)' + in_activity.text)
in_activity.click()
unselect_activity = wait.until(
    EC.presence_of_element_located((By.CSS_SELECTOR,
        "#content > div.even-wrapper > li:nth-child(3) > div > div.img-holder > img")))
unselect_activity.click()

requests进行操作

相对于selenium,此种方法更快,但是编写代码需要更仔细,认真分析fiddler地每一次请求,最好每一次请求都进行模拟,避免缺漏某次请求的cookie设置或返还参数缺漏,导致程序的失败。
通过分析一次完成的操作,在fiddler内进行每一次get、post请求的,在编写代码时,将每次请求都使用requests进行请求,同时循环的将关键参数进行修改,从而完成对用户地切换。在分析地过程中,需要对一些参数进行分析,比如该用户是否已经进行了操作等。

在分析地过程中,关键是需要逐步进行,确认返回的参数是正确的、是成功切换了用户的。

由于需要修改cookie,因此使用到requests的session,此时就需要进行header的设置了(可能每次请求需要的header都不一样)。

程序完善

1. 保存可用用户
为了更快的进行操作,对可用用户、已进行操作的用户进行记录,利用mysql数据库进行记录,同时抽取未操作的用户也是在mysql内抽取。
2. 多线程进行操作
每个程序若单线程进行,就算开了多个程序也比较慢,同时占用内存。进行单程序的多线程设置,需要注意的是如何能避免不会同时抽取到统一用户,实现代码如下:
from multiprocessing.pool import Pool
# 获取所有可用的用户
list = get_id_all(0)[0:max_number]
pool = Pool()
# 将函数、可变的参数参入
pool.map(main,list)
3. 代理的设置
此次操作未进行设置,若公众号对IP访问有限制,可使用代理池进行代理的设置。

个人博客:Loak 正 - 关注人工智能及互联网的个人博客
文章地址:微信公众号上的一次爬虫

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
爬虫是一种自动抓取网页数据的程序,可以用于获取微信公众号的内容信息。下面是一个简单的Python爬虫示例,使用了`requests`库来发送HTTP请求并解析HTML内容,以及使用了`BeautifulSoup`库来进行HTML内容的解析: ```python import requests from bs4 import BeautifulSoup def get_wechat_article(url): # 发送GET请求到指定URL获取文章页面 response = requests.get(url) # 检查请求是否成功 if response.status_code == 200: soup = BeautifulSoup(response.text, 'html.parser') # 解析文章标题、作者、发布日期等信息 title = soup.find('title').text.strip() author = soup.find(id="js_content").find_previous("h2", class_="rich_media_title").text.strip() date = soup.find(id="js_content").find_next_sibling("span").text.strip() # 解析文章内容 article_text = "" for paragraph in soup.find_all("p"): article_text += paragraph.text.strip() + "\n\n" return {'title': title, 'author': author, 'date': date, 'content': article_text} else: print(f"Request failed with status code {response.status_code}") return None # 使用示例 url = "https://mp.weixin.qq.com/s/YsJZxXjwO7oBzRyvLk986A" # 微信公众号文章链接 article_info = get_wechat_article(url) if article_info is not None: print(f"Title: {article_info['title']}\nAuthor: {article_info['author']}\nDate: {article_info['date']}") print("\nContent:\n") print(article_info['content']) else: print("Failed to fetch the article.") ``` 请注意,这个示例仅作为一个基础框架,并可能存在一定的局限性和失效情况,尤其是当网站结构发生变化时。实际应用中,需要考虑到更多的边界条件和异常处理。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值