当前您在:主页 > 微信投票刷票器 >
写爬微信投票结果遇到的正则该怎么办呢
分类:微信投票刷票器 热度:

——首先本文不是研究怎么写一个爬虫。因为我初学爬虫,抓取方式和代码质量都不高。

     初学正则,便踩了坑。其实也不能算坑,是自己没有考虑周全,这篇博文也算是给自己的一个警示吧。

  是这样,我闲来无事想爬一下微信的投票,正好看到朋友圈有一条投票的分享。我便用chrome打开看了源码,发现主页源码中并没有结果。我便打开投票框架的源码,结果很快就发现了投票结果。(很奇怪,框架上提示我是无法投票而且没有显示票数,我却能在源码中找到投票数据)。然后我就尝试对这个源码的url进行get请求,毫无阻拦就请求到了所有源码。(也许是鹅厂觉得我爬个数据并不会造成危害,我连headers就不用模拟就请求到了数据)。下列代码我还是模拟了浏览器。
 

[python] view plain copy
 
  1. def download_code(url):  
  2.     headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36'}  
  3.     data = requests.get(url, headers = headers).content  
  4.     return data  

 

 

     然后,对然后我用正则表达式解析了文本,提取了我要的数据。嗯,我测第一个样例毫无问题,但是我测第二个就出现了我解析文本后只取出了一半的数据。???难道有反爬机制?

  但是我打印了爬下来源码,毫无问题。那么就是我正则表达式出了问题。但是第一个没有出现问题啊!我有分析了一下表达式,也挺合理的!然后我就开始了无限修改正则表达式。对的,我被自己的智商折服,我改了一个多小时。后来突然想到我给的是{\S*},万一花括号里有换行怎么办!但是我加上换行,依旧不起作用。我又看了源码,发现花括号里是直直的一行代码,并没有换行。后来,调了半天发现是里面有一个空格!哭着改完代码,果然爬下来的数据正常了。以后我正则要接受花括号里的任意内容就这么写了{[\S ]*}(当然只能一行。。。),如果对于多行我觉得可以使用{[\S\s^}]*}.下列便是我修改正则表达式抓取数据的代码:

 

[python] view plain copy
 
  1. def prase_html(html):  
  2.   
  3.     soup = BeautifulSoup(html, "html.parser")     
  4.     vote_example = re.compile("voteInfo\=\{[\S ]*\}")  
  5.     instance = re.compile("\{\"name\"\:\"\S*\"cnt\"\:[0-9]*\S*\}")  
  6.     #分析源码来写出正则来抓取数据  
  7.     vote_ = soup.getText()  
  8.     vote = re.findall(vote_example, vote_)  
  9.     getvote = re.findall(instance, str(vote))  
  10.     return getvote  

 完整代码不再给出。不过这样直接把原始内容写到文件内分析实在不方便,考虑以后再写一个分析程序。

 

 另外有更好的方法或者代码不足欢迎指出。

上一篇:MacBook Air更新过后 增加了电池续航能力 下一篇:2017最新关于防止微信投票刷票行为的一些办法
猜你喜欢
各种观点
热门排行
精彩图文