前些天老妈匆忙打电话过来说让我帮她用微信刷学分,具体做法是:关注一个公众主页,公众主页会推送文章,每篇文章最后有个“回复代码”,只要把这个代码回复给公众号,就认为你读完了该篇文章。
如上图,只要把ccq2回复给公众号即可,然而每读完16篇文章才能挣到1个学分,真是屮艸芔茻!!
接到这个任务我的第一反应就是用python爬虫把每篇文章最后的代码爬下来,毕竟最后一句话格式固定,不一样的只是文章代码,要是真读文章再回复代码完全来不及。
好了,直接在电脑端微信打开阅读记录链接http://jsxy.gsedu.cn/wx/course/courseSelect.xhtm?FromUserName=obK7fskWFpwRPTYswm7NipdP6sJM,里面是所有待读的文章:
既然是所有的文章,那网页源代码里必然有所有文章对应的超链接哈,嘿嘿,直接F12走起:
果然里面刺眼的的href好像在对我说,就是我啊,来咬(爬)我啊,哈哈哈。。。
红色标注的地方就是我要抓取下来的文章链接,这个正则表达式也很好写: '<a href="(.*?)" >' 其中(>*?)用贪心匹配把所有符合的网址匹配出来,再用函数把所有符合的网址装到一个list里面
re.compile(r'<a href="(.*?)" >',re.DOTALL) 好了,分析完了,就该贴代码了:
import urllib.request as request
import urllib.parse as parse
import string
import re
import os
import urllib.error as error
import urllib
def fetch(baseUrl):
# 第1步:模拟浏览器发送请求
response = urllib.request.urlopen(baseUrl)
data = response.read()
data=data.decode('utf-8')
# 第2步:页面返回后,利用正则表达式提取想要的内容
nameList=[]
nameList = re.compile(r'<a href="(.*?)" >',re.DOTALL).findall(data)
# 第3步:返回在页面上析取的“标题名”
return nameList
####### 执行 ########
if __name__ =="__main__":
#要抓取的网页地址
url = "http://jsxy.gsedu.cn/wx/course/courseSelect.xhtm?FromUserName=obK7fskWFpwRPTYswm7NipdP6sJM"
#存放到名字列表中
NameList = fetch(url)
# 输出 NameList
Length = len(NameList)
for i in range(0, Length):
print ('%d ref is:%s' %(i+1, NameList[i]))
with open('C:/pythoncode/1228/hehe.txt', 'w') as f:
for i in range(0,Length):
f.write("\n")
f.write(NameList[i])
先让我喝口水,恩,抓完了,就喝一口水的时间!
如上图,共抓去了541个链接,满分学分才541/16=33个,老妈给我要求帮完成24个。
与此同时,这些链接网址也被写到了txt文件里面:
简直不能更整齐!!!好的,既然所有的域名都搞到了,那就再把这些域名挨个分析咯,做法类似,就不描述了哈,当然,展示下最后爬取得文章代码:
最后541个域名解析写出结果的时间也就不到三分钟,哈哈,老妈一年的文章就这样读完了!!
写在最后:
其实这里面并没有开多线程,多线程并发处理这些域名还能更快,只能以后试试咯!
程序员适合用完成一些程序,让大家免于单调重复的劳动,比如上面说的”刷学分“,而不是修电脑,装软件,刷机啊啊啊啊啊啊。