摘要:利用requests和BeautifulSoup,爬取网页的源代码,从而抓取到有用的字符信息后进行筛选与匹配。

注有搜索栏,可以通过url链接直接进行搜索,搜索结果的界面是动态网页和静态网页结合的。(具体我也不知道为什么,但是确实搜索结果一部分在源代码里有,一部分没有)简单起见,我们只爬取静态的部分,这样我们只需解析源代码就好了。

先上代码:

#通过关键词章

import requests
from bs4 import BeautifulSoup
    
def getHTMLText(url): #作用:得到html的text
    try:
        r= requests.get(url,timeout =30)
        r.raise_for_status
        r.encoding= "utf-8"
        return r.text
    except:
        # print ("getHTMLText出现异常")
        return "getHTMLText出现异常"
    
def getInformation(soup): #作用:将html的有用信息筛选出来并储存到相对应的列表alist中
    
    #通过查看网页源代码,分析得到下面的解析特点。
    data =soup.find_all("dl")  #每个dl里面储存着,1个dl里有1个dt和3个dd
    for dl in data:
        ldt=dl.find_all("dt")    #dt里储存着博客的题目
        for dt in ldt:
            # print (type(dt.get_text()))
            text=dt.get_text()
            # print (text)
            indexOfStart=text.find("\n")
            indexOfEnd=text.fin
            # print (indexOfEnd)
            title=text[indexOfStart:indexOfEnd-3].replace("\n","")
            print ("标题是:"+title)
            # print ("@@@@@@@@@@@@@@@@@@@@@@@@@@@")
        ldd =dl.find_all("dd") #1个dl里有3个dd,分别是作者日期浏览次数,简介,链接
        #作者日期浏览次数
        text = ldd[0].get_text()
        indexOfStart = text.find("作者")
        indexOfEnd = text.find("日期")
        author = text[indexOfStart+3:indexOfEnd - 3]
        print ("作者是:" + author)

        indexOfStart = text.find("日期")
        indexOfEnd = text.find("浏览")
        date = text[indexOfStart + 3:indexOfEnd - 3]
        print ("日期是:" +date)

        text = ldd[0].get_text()
        indexOfStart = text.find("浏览")
        indexOfEnd = text.find("次")
        clickTimes = text[indexOfStart + 3:indexOfEnd - 1]
        print ("浏览次数是:" + clickTimes)

        #简介
        text = ldd[1].get_text()
        text=text.replace("\n","")
        print ("简介是:" + text)

        #链接
        text = ldd[2].get_text()
        print ("链接是:" + text)

        print ("**********************************************************")



def main():
    a=["线程","地址"]
    # keyword="进程"
    keyword=""
    for i in range(len(a)-1):
        keyword=keyword+a[i]+"+"
    keyword = keyword + a[-1]
    # print (keyword)

    html = getHTMLText(r""+keyword+"&t=blog&o=&s=&l=")
    soup = BeautifulSoup(html, "html.parser")
    getInformation(soup)

main()



图文解释:下图就是搜索界面,可以看出可以通过url链接直接定位到相关的搜索界面。

python关键字爬虫 python爬取关键词_python关键字爬虫

右键查看源代码,会发现一个比较特别的地方。搜索界面的源代码是部分动态部分静态的。经过分析发现,也是有一定规律的。

python关键字爬虫 python爬取关键词_Python_02

如上图,这两篇博客的信息构架是不同的。上面只有标题、简介和链接,而下面的则多了作者、日期、浏览次数三个信息。然后在源代码里搜索上面的博客,搜不到,说明源代码里没有这篇博客的信息。但下面的博客是在源代码里是搜的到的。

python关键字爬虫 python爬取关键词_python关键字爬虫_03

我猜想原因应该建设过程中有些改动,导致数据的不一致。简单起见我们只爬取静态的博客,即利用源代码的解析,提供我们需要的字符内容就行了。具体操作因网页而已,代码中有介绍,不再赘述。

最后是关键词的问题,单个关键词必较容易,多个关键的+连接,所以这时要注意输入的方式。

评价:

爬取效果:对于静态的博客爬取内容比较全面,便于观看浏览。

时间:速度较快,一秒之内就可以。因为不需要渲染,只需解析源代码即可。