• python3之微信文章爬虫


    前提:

    python3.4

    windows

    作用:通过搜狗的微信搜索接口http://weixin.sogou.com/来搜索相关微信文章,并将标题及相关链接导入Excel表格中

    说明:需xlsxwriter模块,另程序编写时间为2017/7/11,以免之后程序无法使用可能是网站做过相关改变,程序较为简单,除去注释40多行。

    正题:

    思路:打开初始Url  --> 正则获取标题及链接  -->  改变page循环第二步  -->  将得到的标题及链接导入Excel

    爬虫的第一步都是先手工操作一遍(闲话)

    进入上面提到的网址,如输入:“图片识别”,搜索,网址变为“http://weixin.sogou.com/weixin?type=2&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&ie=utf8&s_from=input&_sug_=n&_sug_type_=1&w=01015002&oq=&ri=4&sourceid=sugg&sut=0&sst0=1499778531195&lkt=0%2C0%2C0&p=40040108”标红为重要参数,type=1时是搜索公众号,暂且不管,query=‘搜索关键词’,关键词已经被编码,还有一个隐藏参数page=1

    当你跳到第二页时可以看到“http://weixin.sogou.com/weixin?oq=&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&_sug_type_=1&sut=0&lkt=0%2C0%2C0&s_from=input&ri=4&_sug_=n&type=2&sst0=1499778531195&page=2&ie=utf8&p=40040108&dp=1&w=01015002&dr=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.request
    2     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 re
    2     finddata = re.compile('<a target="_blank" href="(.*?)".*?uigs="article_title_.*?">(.*?)</a>').findall(data)
    3     #finddata = [('',''),('','')]

    通过正则获取的数据中存在干扰项(链接:‘amp;’)和无关项(标题:'<em><...><....></em>'),用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 xlsxwriter
    2 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 xlsxwriter
    12 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.request
    18     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 re
    24     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('&ldquo;','"')
    33             title = title.replace('&rdquo;','"')
    34         except:
    35             pass
    36         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 time
    42     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完毕!')
    天下飞羽,花落凡尘
  • 相关阅读:
    iOS面试题6.30总结
    关于外挂
    webstorm快捷方式
    HTML注释的一些规范
    认识Python
    正体复本术解决容易疲劳、不能持续集中精力工作-海淀区非物质文化遗产:#正体复本术#
    皮肤发痒的观察与思考
    win10不错的快捷键
    项目属性的target platform和target platform version到底是什么(vs2015开发windows驱动小记)
    玩Web虎-运行时受保护文件不可复制
  • 原文地址:https://www.cnblogs.com/AngelYuFan/p/7152760.html
Copyright © 2020-2023  润新知