使用python抓取百度搜索、百度新闻搜索的关键词个数

由于实验的要求,需要统计一系列的字符串通过百度搜索得到的关键词个数,于是使用python写了一个相关的脚本。

在写这个脚本的过程中遇到了很多的问题,下面会一一道来。

ps:我并没有系统地学习过python,只是很久之前用过它,感觉用起来还比较方便,于是这回又把它拾起来使用了。当然这也是考虑到手上有python机器学习的实战书籍,所以估计一段时间后还会再用的缘故。

思路:首先使用python的库函数把网页的内容爬下来,然后使用正则表达式去匹配想要的字符串,最后进行字符串处理就能得到想要的东西了。

具体方法(以百度搜索为例):

(1)读取存放关键词的文本

fid = open(filename,‘r‘)
all_text = fid.readlines()

(2)根据读取到的内容依次来搜索

socket.setdefaulttimeout(4)#设置4s延时
for eachtext in all_text:
    eachtext = eachtext.strip(‘\n‘)#去掉关键词最后的换行符
    output = open(r‘data.txt‘,‘w+‘)#创建一个中间文本,用来存储读取到的数据,这里其实可以不需要这么做,但是我为了调试的方便,这里还是加上了
    flag =  1 #设置标志
    while(flag):  #有时候网速不好,然后程序卡住,上面设置了4s延时时间,然后在这里设定标志位进行循环读取(如果发生了延时错误)
        try:

            res=urllib2.urlopen(("http://www.baidu.com/s?"+urllib.urlencode({‘wd‘: eachtext})+"&pn={0}&cl=3&rn=100"))
            html=res.read()
            flag = 0
        except socket.error:
            errno, errstr = sys.exc_info()[:2]
            if errno == socket.timeout:
                print "There was a timeout"
            else:
                print "There was some other socket error"
    content = unicode(html, ‘utf-8‘,‘ignore‘)
    output.write(html)
    output.seek(0) #把指针移到文件头部

(3)使用正则表达式匹配内容

for line in output.readlines():
        #通过两次正则表达式的匹配得到最终的结果
        m = re.search(r‘相关结果约.*个‘,line)
        if m:
            text = m.group()
            re_text=text.replace(‘,‘,"")
            m = re.search(r‘[0-9]{1,15}‘,re_text)
            if m:
                fout.write(m.group()+‘\n‘) #把匹配的内容写入文件
                print eachtext+‘:‘+m.group() #打印一些调试信息
                break #匹配到直接跳出循环即可

遇到的问题:

(1)中文显示的问题,更细致一点,就是编码的问题了,相信每个学习Python的人都会遇到这个问题!不过这种问题一般不是很难解决,百度上有很多别人的经验。

  >>在我的程序中,我使用的全局编码都是utf-8编码,这样在shell中运行时没有问题的,但是如果在控制台中运行,中文显示便是乱码了,原因是中文系统默认编码是gbk。

  --我解决的办法是在要显示中文的地方先解码然后再编码,eg: print substr.decode(‘utf-8‘).encode(‘gbk‘)

(2)为了在不装python的机器上也能运行我这个脚本,我使用py2exe对程序进行了打包,但是发现程序的图标无法显示出来,打包代码如下:

from distutils.core import setup
import py2exe
import sys
includes = ["encodings", "encodings.*"]
sys.argv.append("py2exe")
options = {"py2exe":   { "bundle_files": 1 }
                }
setup(options = options,
      description = ‘search‘,
      zipfile=None,
      console = [{"script":‘baidu_search.py‘, ‘icon_resources‘:[(1, ‘logo.ico‘)]

  网上说有把序号1换成0就能显示(然而并没有什么卵用),以及一些相关的办法我都尝试了,最终得到一个可行的办法:http://blog.csdn.net/xugangjava/article/details/8049224

(3)为了扩大搜索的范围,例如使用百度新闻搜索、人民网检索、搜狗搜索,我又进行了一些尝试。

  百度新闻搜索:

#搜索的方式
res=urllib2.urlopen(("http://news.baidu.com/ns?"+‘cl=2&rn=20&tn=news&‘+urllib.urlencode({‘word‘:eachtext})))

  人民网检索:

  发现使用的是js,查看源码也没有什么作用,又不会模拟浏览器的行为(预计学习起来要花费不少的时间,然而暂时没有必要),作为爬虫的菜鸟,只能放弃改为手动抓取了。

  搜狗搜索:

  这个是会检测爬虫的,我被多次封ip,可以使用代理ip的方式来对付一下,只不过网上的代理ip资源很少。另外浏览器访问并没有被封,所以个人觉得其中一定有一些技巧,但是只能之后又时间再来研究了。

总结:爬虫这方面的资料还是有挺多的,一些诸如Scrapy的框架应用得很广泛。上面我只是简单地应用了,避免了繁杂的手动搜索。 、

参考资料:

  http://cuiqingcai.com/1052.html

     http://www.cnblogs.com/fnng/p/3576154.html

时间: 2024-11-07 14:49:27

使用python抓取百度搜索、百度新闻搜索的关键词个数的相关文章

python抓取百度彩票的双色球数据

最近在学习<机器学习实战>这本书,在学习的过程中不免要自己去实践,写些练习.这写练习的第一步就需要收集数据,所以为了写好自己的练习程序,我得先学会收集一些网络数据.了解到用python抓取网页数据的一些方法后,我就根据别人的demo,自己实践了一下,学着从百度彩票网站上抓取双色球的历史数据.以下我就介绍一下自己的小程序. 大致思路如下 找到相关url和其参数 找出页面上你要抓取的数据的位置,也就是说这个数据在那些标签下 将每页中学要的数据取下来按一定格式存放在自己本地 需要的环境: pytho

Python抓取需要cookie的网页

Python抓取需要cookie的网页 在仿照<Python小练习:可视化人人好友关系>一文时,需要登录模拟登录人人网.然而自从CSDN事件之后,人人网开始使用加密方式处理登录名和密码,直接使用post方式已经无法登陆人人网.这时,从豆瓣讨论中找到了解决方法: 1. 首先使用浏览器登陆人人,然后找到浏览器中关于登陆的Cookie: 2. 将Cookie记录下来,在Python中使用cookie模块模拟浏览器的行为: 3. 取得并解析数据. 1. HTTP协议与Cookie 抓取网页的过程跟浏览

《一出好戏》讲述人性,使用Python抓取猫眼近10万条评论并分析,一起揭秘“这出好戏”到底如何?

黄渤首次导演的电影<一出好戏>自8月10日在全国上映,至今已有10天,其主演阵容强大,相信许多观众也都是冲着明星们去的.目前<一出好戏>在猫眼上已经获得近60万个评价,评分为8.2分,票房已破10亿. 作者本人(汤小洋 )今天也走进了电影院,对这部电影做了亲身的观看,看完后的感觉是有些许失落的,本以为是喜剧片,结果发现笑点一般,从搞笑的角度来看,不如<西虹市首富>,影片更多的是反映人类本性的一部电影,不应当做喜剧片来看,影片中展现的人与人之间的关系倒是值得我们去深思.

微信好友大揭秘,使用Python抓取朋友圈数据,通过人脸识别全面分析好友,一起看透你的“朋友圈”

微信:一个提供即时通讯服务的应用程序,更是一种生活方式,超过数十亿的使用者,越来越多的人选择使用它来沟通交流. 不知从何时起,我们的生活离不开微信,每天睁开眼的第一件事就是打开微信,关注着朋友圈里好友的动态,而朋友圈中或虚或实的状态更新,似乎都在证明自己的"有趣",寻找那份或有或无的存在感. 有人选择在朋友圈记录生活的点滴,有人选择在朋友圈展示自己的观点.有时我们想去展示自己,有时又想去窥探着别人的生活,而有时又不想别人过多的了解自己的生活,或是屏蔽对方,或是不给对方看朋友圈,又或是不

Python抓取网页&amp;批量下载文件方法初探(正则表达式+BeautifulSoup) (转)

Python抓取网页&批量下载文件方法初探(正则表达式+BeautifulSoup) 最近两周都在学习Python抓取网页方法,任务是批量下载网站上的文件.对于一个刚刚入门python的人来说,在很多细节上都有需要注意的地方,以下就分享一下我在初学python过程中遇到的问题及解决方法. 一.用Python抓取网页 基本方法: [python] view plaincopyprint? import urllib2,urllib url = 'http://www.baidu.com' req 

房东要给我涨800房租,生气的我用Python抓取帝都几万套房源信息,我主动涨了1000。

老猫我在南五环租了一个80平两居室,租房合同马上到期,房东打电话问续租的事,想要加房租:我想现在国家正在也在抑制房价,房子价格没怎么涨,房租应该也不会涨,于是霸气拒绝了,以下是聊天记录:确认不续租之后,两三年没找过房的我上网搜索租房,没想到出来一坨自如,蛋壳,贝壳等中介网站:进去看看,各种房照非常漂亮,但是一看房租,想送给自己一首<凉凉>:附近房租居然比我当前房租高1000多RMB:自我安慰下,这些网站房源价格不是真实的,于是切换到我爱我家,链家等大中介平台,结果发现房租价格都差不多:心想这才

Python抓取页面乱码问题的解决

import urllib2 response=urllib2.urlopen('http://house.focus.cn/') html=response.read() print html.decode('gbk') Python抓取页面乱码问题的解决,布布扣,bubuko.com

使用python抓取CSDN关注人的所有发布的文章

# -*- coding: utf-8 -*- """ @author: jiangfuqiang """ import re import urllib2 import cookielib import time def startParser(author,page=1): reg = r'<a href="/\w+/article/details/\d+">\s*\t*\n*\s*\t*\s*.*?\t*\n

运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中

原文地址:运用python抓取博客园首页的所有数据,而且定时持续抓取新公布的内容存入mongodb中 依赖包: 1.jieba 2.pymongo 3.HTMLParser # -*- coding: utf-8 -*- """ @author: jiangfuqiang """ from HTMLParser import HTMLParser import re import time from datetime import date im

使用python抓取CSDN关注人的全部公布的文章

# -*- coding: utf-8 -*- """ @author: jiangfuqiang """ import re import urllib2 import cookielib import time def startParser(author,page=1): reg = r'<a href="/\w+/article/details/\d+">\s*\t*\n*\s*\t*\s*.*?\t*\n