欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python3用urllib抓取貼吧郵箱和QQ實例

 更新時間:2020年03月10日 11:03:06   作者:共感的藝術  
在本篇文章里小編給大家整理了關于python3中運用urllib抓取貼吧的郵箱以及QQ的實例內容,需要的朋友們可以學習下。

我們首先來看下實例代碼:

import urllib
import urllib.request
import re
from urllib import parse

#抓取貼吧頁面數(shù)量信息
def gettiebalistnumbers(name):  #計算搜索的關鍵詞有多少頁 輸入名字 返回頁數(shù)
  url="https://tieba.baidu.com/f?"
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE"} # header 字典形式
  word = {"kw": name} # 接口  貼吧的名字
  word = parse.urlencode(word) # 編碼成字符串
  url = url + word # 拼接url
  request = urllib.request.Request(url, headers=headers) # 發(fā)送請求
  # 也可以通過調用Request.add_header() 添加/修改一個特定的 header
  request.add_header("Connection", "keep-alive") # 一直活著
  response = urllib.request.urlopen(request) # 打開請求
  data = response.read().decode("utf-8") # 讀取數(shù)據(jù)
  print(response.code) # 可以查看相應狀態(tài)碼

  restr = "<span class=\"card_infoNum\">([\s\S]*?)</span>" # 正則這個貼吧有多少帖子
  regex = re.compile(restr, re.IGNORECASE)
  mylist = regex.findall(data) #尋找頁面所有符合條件的
  tienumbers = mylist[0].replace(",","") #替換逗號
  tienumbers = eval(tienumbers)  #str轉化為數(shù)字
  #print(tienumbers)

  restr = "<span class=\"card_menNum\">([\s\S]*?)</span>" # 正則關注貼吧的數(shù)
  regex = re.compile(restr, re.IGNORECASE)
  mylist = regex.findall(data) # 尋找頁面所有符合條件的
  Peoplenumbers = mylist[0].replace(",", "") # 替換逗號
  Peoplenumbers = eval(Peoplenumbers) # str轉化為數(shù)字
  #print(Peoplenumbers)

  return tienumbers,Peoplenumbers

def gettiebalist(name):  #抓取所有的符合name的頁數(shù) 輸入搜索關鍵詞,返回所有的頁數(shù)url
  numberstuple=gettiebalistnumbers(name)  #(元組)
  tienumbers=numberstuple[1]  #帖子的數(shù)量
  tiebalist = []
  if tienumbers%54==0:  #生成頁面列表
    for i in range(tienumbers//54):
      tiebalist.append("https://tieba.baidu.com/f?kw="+name+"&pn="+str(i*50))
  else:
    for i in range(tienumbers//54+1):
      tiebalist.append("https://tieba.baidu.com/f?kw="+name+"&pn="+str(i*50))
  #print(tiebalist)
  return tiebalist
def geturllistformpage(url):   #抓取頁面的每個帖子url 輸入一頁url 返回列表內的的所有url
  headers = {"User-Agent": "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0);"}
  request = urllib.request.Request(url, headers=headers) # 發(fā)起請求,
  # 也可以通過調⽤Request.add_header() 添加/修改⼀個特定的 header
  response=urllib.request.urlopen(request)
  data=response.read().decode("utf-8","ignore")#打開請求,抓取數(shù)據(jù)
  #print(response.code) # 可以查看響應狀態(tài)碼

  restr = "<ul id=\"thread_list\" class=\"threadlist_bright j_threadlist_bright\">([\s\S]*?)<div class=\"thread_list_bottom clearfix\">" # 正則表達式,()只要括號內的數(shù)據(jù)
  regex = re.compile(restr, re.IGNORECASE)
  mylist = regex.findall(data)
  #print(mylist[0])#抓取整個表格

  restr = "href=\"/p/(\d+)\"" # 正則表達式,()只要括號內的數(shù)據(jù)
  regex = re.compile(restr, re.IGNORECASE)
  urltitlelist = regex.findall(data)
  #print(urltitlelist)   #抓取的url變化的數(shù)字
  urllist=[]
  for title in urltitlelist:
    urllist.append("http://tieba.baidu.com/p/"+title)  #拼接鏈接
  #print(urllist) #得到每個頁面的帖子url列表
  return urllist
def getallurllist(url):     #獲取每一頁里面的分頁  輸入一個帖子url 輸出所有分頁url鏈接
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE"} # header 字典形式
  request = urllib.request.Request(url, headers=headers) # 發(fā)送請求
  # 也可以通過調用Request.add_header() 添加/修改一個特定的 header
  response = urllib.request.urlopen(request) # 打開請求
  tiebadata = response.read().decode("utf-8", "ignore") # 讀取數(shù)據(jù)
  allurllist1=[]

  restr = "共<span class=\"red\">(\d+)</span>頁</li>" # 正則表達式,()只要括號內的數(shù)據(jù)
  regex = re.compile(restr, re.IGNORECASE)
  numalllist = regex.findall(tiebadata)
  nums=eval(numalllist[0])
  for i in range(1,nums+1):
    allurllist1.append(url+"?pn="+str(i))

  return allurllist1

  # print(urltitlelist)   #抓取的url變化的數(shù)字


def getpagedata(url):
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE"} # header 字典形式
  request = urllib.request.Request(url, headers=headers) # 發(fā)送請求
  # 也可以通過調用Request.add_header() 添加/修改一個特定的 header
  response = urllib.request.urlopen(request) # 打開請求
  pagedata = response.read().decode("utf-8","ignore") #讀取數(shù)據(jù)
  return pagedata
def getemaillistfrompage(pagedata): #在帖子內頁面,把每一個郵箱抓取下來  輸入一個帖子url 返回郵箱
  emaillist = []
  restr = "[A-Z0-9._%+-]+[@][A-Z0-9.-]+\.[A-Z]{2,4}" # 正則表達式,()只要括號內的數(shù)據(jù)
  regex = re.compile(restr, re.IGNORECASE)
  emaillist = regex.findall(pagedata)
  return emaillist   #返回提取的郵箱列表

def QQlistfrompage(url): #在帖子內頁面,把每一個郵箱抓取下來  輸入一個帖子url 返回QQ
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE"} # header 字典形式
  request = urllib.request.Request(url, headers=headers)
  response = urllib.request.urlopen(request)
  #data = response.read().decode("utf-8","ignore") #讀取數(shù)據(jù)
  QQlist = []
  while True:
    line = response.readline()
    line = line.decode('utf-8')
    if not line:
      break
    if line.find("QQ") != -1 or line.find("Qq") != -1 or line.find("qq") != -1:
      restr = "[1-9]\\d{4,10}" # 正則表達式,()只要括號內的數(shù)據(jù)
      regex = re.compile(restr, re.IGNORECASE)
      templist = regex.findall(line)
      QQlist.extend(templist)
  return QQlist

#print(gettiebalistnumbers("python"))

#print(gettiebalist("python3"))


#mylist=gettiebalist("python3")
#for line in mylist:
#  print(line)
#geturllistformpage("https://tieba.baidu.com/f?kw=python3&ie=utf-8&pn=4000")
#print(getemaillistfrompage(getpagedata("http://tieba.baidu.com/p/6490450301")))
#print(QQlistfrompage("http://tieba.baidu.com/p/3950107421"))
""" 
name="qqmail"
emailalllist=[]
for numberurl in gettiebalist(name):  #取出這個關鍵詞 所有頁面的url
  tieziurllist=geturllistformpage(numberurl) #取出每個頁面的 帖子url
  for fentieziurllist in tieziurllist:
    tieziurllist1=getallurllist(fentieziurllist)
    
    for pagetext in tieziurllist1:   
      pagedata=getpagedata(pagetext)  #取出每個頁面的代碼
      datas=getemaillistfrompage(pagedata) #正則提取郵箱
      if len(datas) !=0:    #如果提取的里面一個頁面上的一個帖子 郵箱不是空的話
        emailalllist.append(datas[0])
print(emailalllist)       #測試可以提取一個 貼吧的所有郵箱
 """
"""
name="qqmail"
QQalllist=[]
for numberurl in gettiebalist(name):  #取出這個關鍵詞 所有頁面的url
  tieziurllist=geturllistformpage(numberurl) #取出每個頁面的 帖子url
  for url in tieziurllist:
    QQnumberlist=QQlistfrompage(url)  #提取的里面一個頁面上的一個帖子的QQ
    #print(QQnumberlist)
    if len(QQnumberlist) != 0:  #如果一個頁面QQ不為空的話
      for qqdata in QQnumberlist:  #一個頁面QQ列表遍歷
        QQalllist.append(qqdata)  #添加到列表中
     #  qq=QQalllist.append(QQnumberlist[0])
#print(QQalllist)# #提取一個貼吧的所有QQ 測試成功
"""

name="qqmail"
savefilepath="qqmail_qq.txt"
savefile=open(savefilepath,"wb")
for numberurl in gettiebalist(name):  #取出這個關鍵詞 所有頁面的url
  tieziurllist=geturllistformpage(numberurl) #取出每個頁面的 帖子url
  for fenurl in tieziurllist:
    tieziurllist1=getallurllist(fenurl)  #一個頁面分頁的所有鏈接
    for url in tieziurllist1:
      QQnumberlist=QQlistfrompage(url)  #提取的里面一個頁面上的一個帖子的QQ
      #print(QQnumberlist)
      if len(QQnumberlist) != 0:  #如果一個頁面QQ不為空的話
        print(QQnumberlist)
        qqstr=" ".join(QQnumberlist)
        savefile.write((qqstr+"\r\n").encode("utf-8"))

     #  qq=QQalllist.append(QQnumberlist[0])
#最后寫入文件測試, 寫入qq.txt 69K
# TimeoutError: [WinError 10060] 由于連接方在一段時間后沒有正確答復或連接的主機沒有反應,連接嘗試失敗。
#可優(yōu)化為timeout=  或者導入 import time 進行time.sleep(3) 睡眠定時訪問操作,
#為避免出錯,還需再訪問url時加入 try  except 出錯避過

知識點擴充:

Proxy 的設置

urllib2 默認會使用環(huán)境變量 http_proxy 來設置 HTTP Proxy。如果想在程序中明確控制 Proxy 而不受環(huán)境變量的影響,可以使用下面的方式

import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})

if enable_proxy:
  opener = urllib2.build_opener(proxy_handler)
else:
  opener = urllib2.build_opener(null_proxy_handler)

urllib2.install_opener(opener)

這里要注意的一個細節(jié),使用 urllib2.install_opener() 會設置 urllib2 的全局 opener 。這樣后面的使用會很方便,但不能做更細粒度的控制,比如想在程序中使用兩個不同的 Proxy 設置等。比較好的做法是不使用 install_opener 去更改全局的設置,而只是直接調用 opener 的 open 方法代替全局的 urlopen 方法。

以上就是python3用urllib抓取貼吧郵箱和QQ實例的詳細內容,更多關于python3中運用urllib抓取貼吧的郵箱以及QQ的資料請關注腳本之家其它相關文章!

相關文章

  • pytorch中tensor張量數(shù)據(jù)類型的轉化方式

    pytorch中tensor張量數(shù)據(jù)類型的轉化方式

    今天小編就為大家分享一篇pytorch中tensor張量數(shù)據(jù)類型的轉化方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python將腳本程序轉變?yōu)榭蓤?zhí)行程序的實現(xiàn)

    Python將腳本程序轉變?yōu)榭蓤?zhí)行程序的實現(xiàn)

    本文主要介紹了Python將腳本程序轉變?yōu)榭蓤?zhí)行程序的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 關于adfuller函數(shù)返回值的參數(shù)說明與記錄

    關于adfuller函數(shù)返回值的參數(shù)說明與記錄

    這篇文章主要介紹了關于adfuller函數(shù)返回值的參數(shù)說明與記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 利用Python實現(xiàn)sqlite3增刪改查的封裝

    利用Python實現(xiàn)sqlite3增刪改查的封裝

    在一些小的應用中,難免會用到數(shù)據(jù)庫,Sqlite數(shù)據(jù)庫以其小巧輕便,無需安裝,移植性好著稱,下面這篇文章主要給大家介紹了關于利用Python實現(xiàn)sqlite3增刪改查的封裝,需要的朋友可以參考下
    2021-12-12
  • python?用matplotlib繪制折線圖詳情

    python?用matplotlib繪制折線圖詳情

    這篇文章主要講訴了python?用matplotlib繪制折線圖的詳細內容,眾所周知,matplotlib?是一款功能強大開源的數(shù)據(jù)可視化模塊,憑借著強大的擴展性構建出更高級別的繪圖工具接口如seaborn、ggplot,下面我們就根據(jù)之前兩篇文章基礎掌握折線圖的繪制,需要的朋友可以參考一下
    2021-12-12
  • Python接口自動化之接口依賴

    Python接口自動化之接口依賴

    這篇文章主要介紹了python接口自動化測試之接口數(shù)據(jù)依賴的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-08-08
  • Python中tkinter+MySQL實現(xiàn)增刪改查

    Python中tkinter+MySQL實現(xiàn)增刪改查

    這篇文章主要介紹了Python中tkinter+MySQL實現(xiàn)增刪改查,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • python中有幫助函數(shù)嗎

    python中有幫助函數(shù)嗎

    在本篇文章里小編給大家分享的是一篇關于python幫助函數(shù)詳解內容,有興趣的朋友們可以學習下。
    2020-06-06
  • Python字符串常用方法以及其應用場景詳解

    Python字符串常用方法以及其應用場景詳解

    本人學習python時的總結,并不需要記住,知道有這個方法,拿起來用就行,下面這篇文章主要給大家介紹了關于Python字符串常用方法以及其應用場景的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • Python多進程同步簡單實現(xiàn)代碼

    Python多進程同步簡單實現(xiàn)代碼

    這篇文章主要介紹了Python多進程同步簡單實現(xiàn)代碼,涉及Python基于Process與Lock模塊運行進程與鎖機制實現(xiàn)多進程同步的相關技巧,需要的朋友可以參考下
    2016-04-04

最新評論