最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python爬蟲抓取論壇關(guān)鍵字過程解析

 更新時間:2020年10月19日 11:51:24   作者:panfengzjz  
這篇文章主要介紹了Python爬蟲抓取論壇關(guān)鍵字過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

前言:

之前學習了用python爬蟲的基本知識,現(xiàn)在計劃用爬蟲去做一些實際的數(shù)據(jù)統(tǒng)計功能。由于前段時間演員的誕生帶火了幾個年輕的實力派演員,想用爬蟲程序搜索某論壇中對于某些演員的討論熱度,并按照日期統(tǒng)計每天的討論量。

這個項目總共分為兩步:

1.獲取所有帖子的鏈接:

將最近一個月內(nèi)的帖子鏈接保存到數(shù)組中

2.從回帖中搜索演員名字:

從數(shù)組中打開鏈接,翻出該鏈接的所有回帖,在回帖中查找演員的名字

獲取所有帖子的鏈接:

搜索的范圍依然是以虎撲影視區(qū)為界限。虎撲影視區(qū)一天約5000個回帖,一月下來超過15萬回帖,作為樣本來說也不算小,有一定的參考價值。

完成這一步驟,主要分為以下幾步:

1.獲取當前日期

2.獲取30天前的日期

3.記錄從第一頁往后翻的所有發(fā)帖鏈接

1.獲取當前日期

這里我們用到了datetime模塊。使用datetime.datetime.now(),可以獲取當前的日期信息以及時間信息。在這個項目中,只需要用到日期信息就好。

2.獲取30天前的日期

用datetime模塊的優(yōu)點在于,它還有一個很好用的函數(shù)叫做timedelta,可以自行計算時間差。當給定參數(shù)days=30時,就會生成30天的時間差,再用當前日期減去delta,可以得到30天前的日期,將該日期保存為startday,即開始進行統(tǒng)計的日期。不然計算時間差需要自行考慮跨年閏年等因素,要通過一個較為復雜的函數(shù)才可以完成。

today = datetime.datetime.now()
delta = datetime.timedelta(days=30)
i = "%s" %(today - delta)
startday = i.split(' ')[0]
today = "%s" %today
today = today.split(' ')[0]

在獲得開始日期與結(jié)束日期后,由于依然需要記錄每一天每個人的討論數(shù),根據(jù)這兩個日期生成兩個字典,分別為actor1_dict與actor2_dict。字典以日期為key,以當日討論數(shù)目作為value,便于每次新增查找記錄時更新對應的value值。

strptime, strftime = datetime.datetime.strptime, datetime.datetime.strftime
days = (strptime(today, "%Y-%m-%d") - strptime(startday, "%Y-%m-%d")).days
for i in range(days+1):
temp = strftime(strptime(startday, "%Y-%m-%d") + datetime.timedelta(i), "%Y-%m-%d")
actor1_dict[temp] = 0
actor2_dict[temp] = 0

3.記錄從第一頁往后翻的所有發(fā)帖鏈接

​如圖1所示,采用發(fā)帖順序排列,可以得到所有的發(fā)帖時間(精確到分鐘)。右鍵并點擊查看網(wǎng)頁源代碼,可以發(fā)現(xiàn)當前帖子的鏈接頁面,用正則表達式的方式抓取鏈接。

首先依然是獲取30天前的日期,再抓取第i頁的源代碼,用正則表達式去匹配,獲取網(wǎng)頁鏈接和發(fā)帖時間。如圖2所示:

比較發(fā)帖時間,如果小于30天前的日期,則獲取發(fā)帖鏈接結(jié)束,返回當前拿到的鏈接數(shù)組,代碼如下

def all_movie_post(ori_url):
  i = datetime.datetime.now()
  delta = datetime.timedelta(days=30)
  i = "%s" %(i - delta)
  day = i.split(' ')[0] # 獲得30天前的日子
  print day
 
  user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
  headers = { 'User-Agent' : user_agent }
 
  post_list = []
  for i in range(1,100):
    request = urllib2.Request(ori_url + '-{}'.format(i),headers = headers)
    response = urllib2.urlopen(request)
    content = response.read().decode('utf-8')
    pattern = re.compile('<a href="(.*?)" rel="external nofollow" class="truetit" >.*?<a style="color:#808080;cursor: initial; ">(.*?)</a>', re.S)
    items = re.findall(pattern,content)
    for item in items:
      if item[1] == '2011-09-16':
        continue
      if item[1] > day: #如果是30天內(nèi)的帖子,保存
        post_list.append('https://bbs.hupu.com' + item[0])
      else: #如果已經(jīng)超過30天了,就直接返回
        return post_list
  return post_list

函數(shù)的傳參是鏈接首頁,在函數(shù)中修改頁碼,并繼續(xù)搜索。

從回帖中搜索演員名字:

接下來的步驟也是通過一個函數(shù)來解決。函數(shù)的傳參包括上一步中得到的鏈接數(shù)組,已經(jīng)想要查詢的演員名字(這個功能可以進一步擴展,將演員名字也用列表的形式傳輸,同時上一步生成的字典也可以多一些)。

由于虎撲論壇會將一些得到認可的回帖擺在前端,即重復出現(xiàn)。如圖3所示:

​為了避免重復統(tǒng)計,將這些重復先去除,代碼如下:

if i == 0:
        index = content.find('更多亮了的回帖')
        if index >= 0:
          content = content[index:]
        else:
          index = content.find('我要推薦')
          content = content[index:]

去除的規(guī)則其實并不重要,因為每個論壇都有自己的格式,只要能搞清楚源代碼中是怎么寫的,剩下的操作就可以自己根據(jù)規(guī)則進行。

每個回帖格式大致如圖4,

用對應的正則表達式再去匹配,找到每個帖子每一個回帖的內(nèi)容,在內(nèi)容中搜索演員名字,即一開始的actor_1與actor_2,如果搜到,則在對應回帖日期下+1。

最終將兩位演員名字出現(xiàn)頻率返回,按日期記錄的字典由于是全局變量,不需要返回。

web_str = '<span class="stime">(.*?) .*?</span>.*?<tbody>[\s]*<tr>[\s]*<td>(.*?)<br />' #找到回帖內(nèi)容的正則
      pattern = re.compile(web_str, re.S)
      items = re.findall(pattern,content)
      for item in items:
        #if '<b>引用' in item: #如果引用別人的回帖,則去除引用部分
          #try:
            #item = item.split('</blockquote>')[1]
          #except:
            #print item
            #print item.decode('utf-8')
        if actor_1 in item[1]:
          actor1_dict[item[0]] += 1
          actor_1_freq += 1
        if actor_2 in item[1]:
          actor2_dict[item[0]] += 1
          actor_2_freq += 1

至此,我們就利用爬蟲知識,成功完成對論壇關(guān)鍵字的頻率搜索了。

這只是一個例子,關(guān)鍵字可以任意,這也不只是一個針對演員的誕生而寫的程序。將演員名字換成其他詞,就可以做到類似“您的年度關(guān)鍵字”這樣的結(jié)果,根據(jù)頻率大小來顯示文字大小。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python獲取郵件地址的方法

    Python獲取郵件地址的方法

    這篇文章主要介紹了Python獲取郵件地址的方法,通過自定義函數(shù)分析提取字符串中郵件地址的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • python3獲取文件中url內(nèi)容并下載代碼實例

    python3獲取文件中url內(nèi)容并下載代碼實例

    這篇文章主要介紹了python3獲取文件中url內(nèi)容并下載代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-12-12
  • opencv中顏色空間轉(zhuǎn)換函數(shù)cv2.cvtColor()使用

    opencv中顏色空間轉(zhuǎn)換函數(shù)cv2.cvtColor()使用

    本文主要介紹了opencv中顏色空間轉(zhuǎn)換函數(shù)cv2.cvtColor()使用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • python爬蟲爬取某站上海租房圖片

    python爬蟲爬取某站上海租房圖片

    這篇文章主要介紹了學習python爬蟲并爬取某站上海租房圖片的原理介紹以及相關(guān)代碼分享,對此有興趣的朋友學習下。
    2018-02-02
  • Python3自動生成MySQL數(shù)據(jù)字典的markdown文本的實現(xiàn)

    Python3自動生成MySQL數(shù)據(jù)字典的markdown文本的實現(xiàn)

    這篇文章主要介紹了Python3自動生成MySQL數(shù)據(jù)字典的markdown文本的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-05-05
  • Python?matplotlib實戰(zhàn)之氣泡圖繪制

    Python?matplotlib實戰(zhàn)之氣泡圖繪制

    氣泡圖是一種多變量的統(tǒng)計圖表,可以看作是散點圖的變形,這篇文章主要為大家介紹了如何使用Matplotlib繪制氣泡圖,需要的小伙伴可以參考下
    2023-08-08
  • 解決Mac下使用python的坑

    解決Mac下使用python的坑

    今天小編就為大家分享一篇解決Mac下使用python的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • 對python中的argv和argc使用詳解

    對python中的argv和argc使用詳解

    今天小編就為大家分享一篇對python中的argv和argc使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 12個步驟教你理解Python裝飾器

    12個步驟教你理解Python裝飾器

    這篇文章主要介紹了12個步驟教你理解Python裝飾器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-07-07
  • python集合常見運算案例解析

    python集合常見運算案例解析

    這篇文章主要介紹了python集合常見運算,結(jié)合具體實例形式分析了Python使用集合生成隨機數(shù)的幾種常用算法的效率比較,需要的朋友可以參考下
    2019-10-10

最新評論

济源市| 东光县| 通海县| 繁昌县| 炉霍县| 巫山县| 阆中市| 上林县| 鲜城| 邯郸县| 南川市| 五指山市| 长子县| 马边| 沛县| 卫辉市| 日土县| 平武县| 沂水县| 琼海市| 上思县| 荥经县| 拜泉县| 周宁县| 永泰县| 五原县| 兴和县| 田东县| 巴林左旗| 龙州县| 扎赉特旗| 靖西县| 武邑县| 扶风县| 佳木斯市| 天祝| 达州市| 巴楚县| 赣榆县| 尼玛县| 大同县|