根据以前的脚本改的抓取一天内的百度新问题

也就是从百度抓点对公司有用的问题,然后能及时了解信息。

没有注释 ,太简单了,一看就懂哈。

只是作写烂的地方是,没有直接从结果里发邮件,而是用多线程生成文件,然后通过邮件发这些文件里的内容。。

UI没有,直接干!

主要涉及一个转码,可以直接搜索

#!/usr/bin/python
# coding: UTF-8

import os,sys,time,commands
import urllib
import urllib2
import string
from bs4 import BeautifulSoup
import threading
import smtplib
from email.mime.text import MIMEText

mail_host = 'smtp.x.x.com'
mail_user = 'xx@xx.xx'
mail_pwd = 'xxxx'

keywordList = []

f1= open("ZhidaoKeyword",'r')
for line in f1:
    line = line.strip('\n')
    keywordList.append(line)
f1.close()

def send_email( content, mailto, get_sub ):
    print 'Setting MIMEText'
    msg = MIMEText( content.encode('utf8'), _subtype = 'html', _charset = 'utf8')
    msg['From'] = mail_user
    msg['Subject'] = u'%s' % get_sub
    msg['To'] = ",".join( mailto )

    try:
        print 'connecting ', mail_host
        s = smtplib.SMTP_SSL( mail_host, 465 )

        #s.connect(mail_host)

        print 'login to mail_host'
        s.login(mail_user, mail_pwd )

        print 'send email'
        s.sendmail(mail_user, mailto, msg.as_string())

        print 'close the connection between the mail server'
        s.close()
    except Exception as e:
        print 'Exception: ', e

class SearchZhidao(threading.Thread):
    def __init__(self,keywordList):
        threading.Thread.__init__(self)
        self.keywordList = keywordList

    def SearchZhidao(self):
        for keyword in self.keywordList:
            try:
        str = keyword.encode('gb2312')
        str_dic = {'word':str}
        encode_keyword = urllib.urlencode(str_dic)
        url = "http://zhidao.baidu.com/browse?" + encode_keyword + "&pn=0&cid=0&lm=8960"
            htmlpage = urllib2.urlopen(url).read()
        htmlpage = unicode(htmlpage, "gb2312").encode("utf8")
            soup = BeautifulSoup(htmlpage)
                for result_li in soup.findAll("li", {"class": "question-item"}):
            question_time = result_li.find("div", {"class": "question-time"})
            q_time = question_time.get_text().split()
            if len(q_time) > 1 and u'小时' in q_time[1]:
                        html_output = "<tr><td>" + keyword  + "</td><td>"
            a_click =  result_li.find("a")
            html_output += "<a class='question-title' href='http://zhidao.baidu.com" + a_click.get("href") + "' target='_blank'>"
            html_output += a_click.renderContents() + "</a></td>"
            html_output += "<td>" + question_time.get_text() + "</td></tr>"
            file_object.write(html_output)
            else:
            pass
            except Exception as e:
                print e,keyword
                continue

    def run(self):
        self.SearchZhidao()

if __name__ == "__main__":

    print "start the programe...."
    SearchZhidaoThreads = []
    file_object = open('zhidao_html_mail.html', 'w')
    file_object.write("<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Seo</title></head><body><table>")
    for i in range(20):
        t = SearchZhidao(keywordList[((len(keywordList)+19)/20) * i:((len(keywordList)+19)/20) * (i+1)])
        SearchZhidaoThreads.append(t)

    for i in range(len(SearchZhidaoThreads)):
        SearchZhidaoThreads[i].start()
    for i in range(len(SearchZhidaoThreads)):
        SearchZhidaoThreads[i].join()
    file_object.write("</table></body></html>")
    file_object.close()
    print "finished this job!"

    html_mail = ""
    f2= open("zhidao_html_mail.html",'r')
    for line in f2:
        html_mail += line
    f2.close()
    time_title = curTime = time.strftime("%Y-%m-%d %X", time.localtime(time.time()))
    to_list = [ 'xxx@xx.xx', 'xx@x.xxx' ]
    send_email( html_mail, to_list, '百度知道最近问题'+ time_title )

邮件输出样子:

时间: 2024-09-18 23:36:06

根据以前的脚本改的抓取一天内的百度新问题的相关文章

爬虫 数据挖掘-如何抓取微信群内个人id

问题描述 如何抓取微信群内个人id 因年会需要,需要抓取微信群内个人id的方法,请各位大神不吝赐教 解决方案 看下微信的sdk,对应的做法 解决方案二: https://github.com/Alexis374/tech_post/blob/master/crawl%20wechat%20article.md 一个微信爬虫的例子,稍稍修改应该就可以了.

百度不再抓取“description”部分时站长如何应对?

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 每天忙着做手里的单子,好久都没有写SEO优化的文章了,今天怎么也要抽点时间来谈谈这个问题,因为这个问题小则只是影响我们短时间的网站排名和流量大小,大则可能会影响我们SEO优化行业的技术变动.都说SEO行业是在不断推动搜索引擎技术更佳优良化,从现在用户从搜索引擎搜索出来结果满意度与以往比较确定有了很大的提高,虽然,不能说这种效果是我们SEOER

求助! 使用java抓取网页数据

问题描述 我想要抓取这个https://www.bicing.cat/es/formmap网上的有关自行车的信息改怎么样抓取??求指教! 解决方案 解决方案二:请求这个网址,然后把获取到的InputStream读出来,看看有没有你要的数据.newInputStreamReader(((HttpURLConnection)(newURL("https://www.bicing.cat/es/formmap")).openConnection()).getInputStream()); 解

国家版权局裁定360抓取百度内容属侵权

"剑网行动"新闻通气会现场. 12月29日,国家版权局在打击网络侵权盗版专项治理"剑网行动"新闻通气会上指出:360综合搜索提供百度网页快照不适用"避风港原则",对于百度拥有权利的作品,360要通过网页快照抓取,必须要取得百度公司的授权,未经授权随意抓取百度拥有版权的作品属侵权行为. 据了解,国家版权局已经要求360综合搜索进行整改,同时将视360的整改情况再采取进一步的管理措施.这也是自360违规抓取百度内容而引发3B大战以来,国家有关部委的首

Python3分析sitemap.xml抓取导出全站链接

最近网站从HTTPS转为HTTP,更换了网址,旧网址做了301重定向,折腾有点大,于是在百度站长平台提交网址,不管是主动推送还是手动提交,前提都是要整理网站的链接,手动添加太麻烦,效率低,于是就想写个脚本直接抓取全站链接并导出,本文就和大家一起分享如何使用python3实现抓取链接导出. 首先网站要有网站地图sitemap.xml文件地址,其次我这里用的是python3版本,如果你的环境是python2,需要对代码进行调整,因为python2和python3很多地方差别还是挺大的. 下面是pyt

实战分析百度站长工具之抓取诊断工具详解

做谷歌优化的朋友对谷歌管理员工具一定不陌生,在谷歌管理员工具中,有"像谷歌一样抓取"功能,现在做百度优化的朋友福利也来了,百度站长工具最近推出"抓取诊断"工具,通过该功能可以更好的辅助SEO优化工作,下面就给大家解释一下该功能的用法和注意事项. 什么是抓取诊断工具 抓取诊断工具,可以让站长从百度蜘蛛的视角查看抓取内容,自助诊断百度蜘蛛看到的内容,和预期是否一致. 每个站点每月可使用300次,抓取结果只展现百度蜘蛛可见的前200KB内容. 注意:要使用抓取诊断工具,前

百度站长平台lee:谈spider抓取过程中的策略

A5站长网8月22日消息,此前百度站长平台Lee曾分享过关于搜索引擎抓取系统中有关抓取系统基本框架.抓取中涉及的网络协议.抓取的基本过程的内容,今日Lee再次通过百度站长平台分享搜索引擎抓取系统第二部分内容-spider抓取过程中的策略. Lee表示spider在抓取过程中面对着复杂的网络环境,为了使系统可以抓取到尽可能多的有价值资源并保持系统及实际环境中页面的一致性同时不给网站体验造成压力,会设计多种复杂的抓取策略.并简单介绍了抓取过程中涉及到的主要策略类型. 在百度站长平台社区-你问lee答

再浅谈百度抓取时出现的200 0 64现象

只有经历过网站关键词搜索排名跌宕起伏的站长才能真正明白,等待不是一种方式,结果需要努力和勤劳来弥补.笔者经历了网站改版到降权,关键词一无所有到关键词排名起色的过程,这个过程让人难熬和艰辛,如果有一天每一位站长都经历过这样的历程,我想百度会比现在弱小很多. 笔者的站在近3个月前进行一次改版,改版的目的就是为了URL标准和简单,同时也做了网站网页布局的修改,从改版后开始网站关键词一无所有,等待我的只有坚持内容更新和外链发布,直至上周网站频道关键词和长尾关键词开始进入百名,从网站改版到目前有所成就的过

使用nginx限制百度蜘蛛的频繁抓取

百度蜘蛛抓取量骤增,导致服务器负载很高.最终用nginx的ngx_http_limit_req_module模块限制了百度蜘蛛的抓取频率.每分钟允许百度蜘蛛抓取200次,多余的抓取请求返回503. nginx的配置: #全局配置 limit_req_zone $anti_spider zone=anti_spider:60m rate=200r/m; #某个server中 limit_req zone=anti_spider burst=5 nodelay; if ($http_user_age