python调用微信公众号搜索

该案例调用搜狗微信公众号搜索的接口,实现了输入关键字搜索然后返回对应的公众号名称,公众号,以及公众号描述的功能

# coding:utf-8
import requests
import urllib
from bs4 import BeautifulSoup

# 爬取的网址url:http://weixin.sogou.com/weixin?type=1&s_from=input&query=%E4%BA%A7%E5%93%81&ie=utf8&_sug_=n&_sug_type_=

# 定义获取url管理器的方法
def get_url(keyword, page):
    urlList = []
    for page in range(page):
        page = page + 1
        firstUrl = 'http://weixin.sogou.com/weixin?type=1&s_from=input&ie=utf8&_sug_=n&_sug_type_=&query='
        lastUrl = '&page='
        kw = urllib.quote(keyword)
        url = firstUrl + kw + lastUrl + str(page)
        urlList.append(url)
    return urlList


# 定义获取搜索结果的方法
def get_info(keyword, page):
    urlList = get_url(keyword, page)
    resList = []
    for url in urlList:
        response = requests.get(url)
        res = response.content
        soup = BeautifulSoup(res, 'html.parser')
        nameList = soup.findAll('p', attrs={'class': 'tit'})
        enameList = soup.findAll('label', attrs={'name': 'em_weixinhao'})
        summaryList = soup.select('.gzh-box2 + dl > dd')
        # 分页搜索结果返回的条数不一致(搜狗的反爬机制),所以这边选择了7作为临界值,某一个url返回的大于等于7,则爬取第2页,否则不进行第2页爬取
        # 这里应该还有更好的方案,大家可以想一想
        if len(nameList) >= 7:  
            for v in range(len(nameList)):
                resDict = {}
                resDict = {
                    'name': nameList[v].text.strip('\n'),
                    'ename': enameList[v].text,
                    'summary': summaryList[v].text
                }
                resList.append(resDict)
        else:
            for v in range(len(nameList)):
                resDict = {}
                resDict = {
                    'name': nameList[v].text.strip('\n'),
                    'ename': enameList[v].text,
                    'summary': summaryList[v].text
                }
                resList.append(resDict)
            break

    for weixin in resList:
        print '名字:%s' % (weixin['name'].encode('utf-8'))
        print '公众号:%s' % (weixin['ename'].encode('utf-8'))
        print '描述:%s' % (weixin['summary'].encode('utf-8'))
        print '\n'


if __name__ == '__main__':
    keyword = raw_input('请输入关键字:')
    page = input('请输入搜索结果的页数:')
    get_info(keyword, page)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,595评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 公司自助餐厅,正在排队的我,听到了这样一组对话: 女生::你盛这么多,吃得完吗? 男生:我今早上赶得急,没吃饭,有...
    军嫂梓萤阅读 514评论 0 1
  • 今天生命地图复训第一天,晚上在做个案的时候,我的情绪完全被带起来了,于是一个人在小房间一直放,原来这么多年,我一直...
    金晶花阅读 269评论 0 0
  • 人老先从腿上老。 当家中老人腿脚不便,步履蹒跚时。你可想到也许老人膝关节正遭受病痛的折磨! 西医膝关节痛分诸多种原...
    针道自然李阅读 761评论 0 0