python3爬取微信文章
前提:
python3.4
windows
作用:通过搜狗的微信搜索接口来搜索相关微信文章,并将标题及相关链接导入Excel表格中
说明:需xlsxwriter模块,另程序编写时间为2017/7/11,以免之后程序无法使用可能是网站做过相关改变,程序较为简单,除去注释40多行。
立即学习“Python免费学习笔记(深入)”;
正题:
思路:打开初始Url --> 正则获取标题及链接 --> 改变page循环第二步 --> 将得到的标题及链接导入Excel
爬虫的第一步都是先手工操作一遍(闲话)
进入上面提到的网址,如输入:“图片识别”,搜索,网址变为“”标红为重要参数,type=1时是搜索公众号,暂且不管,query=‘搜索关键词’,关键词已经被编码,还有一个隐藏参数page=1
当你跳到第二页时可以看到“”
好了,url可以得到了
1 url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)
search是要搜索的关键词,用quote()编码即可插入
1 search = urllib.request.quote(search)
page是用来循环的
1 for page in range(1,pagenum+1):2 url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)
完整的url已经得到了,接下来访问url,获得其中的数据(创建opener对象,添加header())
1 import urllib.request2 header = ('User-Agent','Mozilla/5.0')3 opener = urllib.request.build_opener()4 opener.addheaders = [header]5 urllib.request.install_opener(opener)6 data = urllib.request.urlopen(url).read().decode()
得到页面内容,采用正则表达获取相关数据
1 import re2 finddata = re.compile('<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>').findall(data)3 #finddata = [('',''),('','')]
通过正则获取的数据中存在干扰项(链接:‘amp;’)和无关项(标题:''),用replace()解决
1 title = title.replace('<em><!--red_beg-->','')2 title = title.replace('<!--red_end--></em>','')
1 link = link.replace('amp;','')
将处理后的标题和链接保存在列表中
1 title_link.append(link)2 title_link.append(title)
如此搜索的标题和链接都得到了,接下来导入Excel
先创建Excel
1 import xlsxwriter2 workbook = xlsxwriter.Workbook(search+'.xlsx')
3 worksheet = workbook.add_worksheet('微信')
将title_link中的数据导入Excel
1 for i in range(0,len(title_link),2):2 worksheet.write('A'+str(i+1),title_link[i+1])3 worksheet.write('C'+str(i+1),title_link[i])4 workbook.close()
完整代码:
1 ''' 2 python3.4 + windows 3 羽凡-2017/7/11- 4 用于搜索微信文章,保存标题及链接至Excel中 5 每个页面10秒延迟,防止被限制 6 import urllib.request,xlsxwriter,re,time 7 ''' 8 import urllib.request 9 search = str(input("搜索微信文章:"))10 pagenum = int(input('搜索页数:'))11 import xlsxwriter12 workbook = xlsxwriter.Workbook(search+'.xlsx')13 search = urllib.request.quote(search)14 title_link = []15 for page in range(1,pagenum+1):16 url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)17 import urllib.request18 header = ('User-Agent','Mozilla/5.0')19 opener = urllib.request.build_opener()20 opener.addheaders = [header]21 urllib.request.install_opener(opener)22 data = urllib.request.urlopen(url).read().decode()23 import re24 finddata = re.compile('<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>').findall(data)25 #finddata = [('',''),('','')]26 for i in range(len(finddata)):27 title = finddata[i][1]28 title = title.replace('<em><!--red_beg-->','')29 title = title.replace('<!--red_end--></em>','')30 try:31 #标题中可能存在引号32 title = title.replace('“','"')33 title = title.replace('”','"')34 except:35 pass36 link = finddata[i][0]37 link = link.replace('amp;','')38 title_link.append(link)39 title_link.append(title)40 print('第'+str(page)+'页')41 import time42 time.sleep(10)43 worksheet = workbook.add_worksheet('微信')44 worksheet.set_column('A:A',70)45 worksheet.set_column('C:C',100)46 bold = workbook.add_format({'bold':True})47 worksheet.write('A1','标题',bold)48 worksheet.write('C1','链接',bold)49 for i in range(0,len(title_link),2):50 worksheet.write('A'+str(i+1),title_link[i+1])51 worksheet.write('C'+str(i+1),title_link[i])52 workbook.close()53 print('导入Excel完毕!')