亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python爬取微信公眾號文章

2020-02-15 22:52:26
字體:
來源:轉載
供稿:網友

本文實例為大家分享了python爬取微信公眾號文章的具體代碼,供大家參考,具體內容如下

# -*- coding: utf-8 -*-import requestsfrom bs4 import BeautifulSoupfrom requests.exceptions import RequestExceptionimport timeimport randomimport MySQLdbimport threadingimport socketimport math socket.setdefaulttimeout(60)#這里對整個socket層設置超時時間。后續文件中如果再使用到socket,不必再設置 glock = threading.Lock() #定義全局鎖 CATEGORY_URL= ['http://www.we123.com/gzh/onclick/'] #獲取地區分類鏈接all_url = [] #ALL_URLS = [] #所有詳細頁面鏈接proxy_list = [] #IP池URL = 'http://www.we123.com'PAGE_URL = [] #所有分頁鏈接 #獲取Ip池def get_ip():  headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}  url = 'http://http-webapi.zhimaruanjian.com'#可以使用芝麻代理,好用穩定還不貴  resp = requests.get(url,headers=headers)  obj = resp.json() #獲取json ip池對象  for ip in obj:    arr = 'http://' + str(ip['ip']) + ':' + str(ip['port'])    proxy_list.append(arr) #獲取頁面源碼函數def get_html(url):  # headers = {}  user_agent_list = [    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3538.400 QQBrowser/9.6.12501.400',    'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',    'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'  ]  # user_agent = random.choice(user_agent_list)  headers = {    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.104 Safari/537.36 Core/1.53.3538.400 QQBrowser/9.6.12501.400'  }  # 代理,免費的代理只能維持一會可能就沒用了,自行更換  # proxy_list = [  #   "http://27.192.185.62:3252",  # ]  # proxy_ip = random.choice(proxy_list)  # proxies = {'http': proxy_ip}  # print(str(url))  try:    resp = requests.get(url,headers=headers)    # print("72行:status_code = " + str(resp.status_code))    # print(type(resp.text))    # print(resp.url) # 請求的url    if resp.status_code == 200:      return resp    elif resp.status_code == 404:      return resp    elif resp.status_code == 500:      return resp    return resp  except RuntimeError:    print("超時")    return "error"  except ConnectionError:    print("連接超時")    return "error"  except RequestException:    print("http請求父類錯誤")    with open('url_exception.txt','a+', encoding='utf-8') as f:      f.write(str(url))      f.write('/n')    return "error" #獲取區域分類鏈接def get_categoty_url():  url = 'http://www.we123.com/gzh/onclick/'  resp = get_html(url)  soup = BeautifulSoup(resp.text,'lxml')  html = soup.select('div.div-subs2 > div.divst-content > div.divst-subs > li > a')  # 獲取區域分類鏈接  for i in html:    city = i['href'].split("/")[-1]    if (city == '海外' or city == '臺灣' or city == '澳門'):      continue    url = URL + i['href']    CATEGORY_URL.append(url)  print(CATEGORY_URL)  #獲取每個區域下所有分頁鏈接def get_page_url(url):  city = url.split('/')[-1]  html = get_html(url)  if html == "error":    print("98行:connect url error")    time.sleep(random.randint(10,20))    return "error"  soup = BeautifulSoup(html.text,'lxml')  #獲取總條數  all_nums = soup.select("div.page > a > b")  if len(all_nums) == 0:    return "error"  else:    all_nums = soup.select("div.page > a > b")[0].get_text()  #獲取總分頁數  all_pages = math.ceil((int(all_nums) / 30))  #獲取所有分頁鏈接  all_page_url = []  for i in range(0,int(all_pages)):    page_url = 'http://www.we123.com/e/action/ListInfo.php?page=' + str(i) + '&classid=45&line=30&tempid=10&orderby=onclick&myorder=0&totalnum=' + str(all_nums)    all_page_url.append(page_url)  return all_page_url # 獲取所有詳細頁面鏈接def get_page_urls():    global PAGE_URL    c_url = CATEGORY_URL.pop()    print('121 行:請求鏈接' + c_url)    PAGE_URL = get_page_url(c_url) #獲取每個區域下面的所有分頁鏈接 # 獲取所有詳細頁面鏈接def get_info_urls():  while True:    global PAGE_URL #設置全局變量    glock.acquire() #加鎖    if len(PAGE_URL) == 0:      glock.release() #解鎖      print('131 行:CATEGORY_URL 為空')      break    else:      p_url = PAGE_URL.pop()      print('135 行:請求鏈接' + p_url)      glock.release() #解鎖       glock.acquire() #加鎖      html = get_html(p_url)      if html == "error":        print("141行:connect url error")        time.sleep(2)        return      soup = BeautifulSoup(html.text,'lxml')      info_urls = soup.select('div.gzhRight > div.gzh_list > ul > li > a')      for x in info_urls:        i_url = URL + x['href']        ALL_URLS.append(i_url)      print("庫存鏈接共:" + str(len(ALL_URLS)))    glock.release() #解鎖#獲取每一頁需要的數據def get_data():  while True:    global ALL_URLS #設置全局變量    glock.acquire() #加鎖    print("當前庫存:"+str(len(ALL_URLS)))    if len(ALL_URLS) == 0:      glock.release() #解鎖      print('159 行 :ALL_URLS 為空')      break    else:      url = ALL_URLS.pop()      print("開始抓取數據:" + url)      glock.release() #解鎖      time.sleep(1) #睡眠1秒鐘      html = get_html(url)      if html == "error":        print("168行:connect url error")        time.sleep(random.randint(2, 4))        return      html.encoding='utf-8' #顯式地指定網頁編碼,一般情況可以不用      soup = BeautifulSoup(html.text,'lxml')      #公眾號名稱      names = soup.select('div.artcleLeft > div.xcxnry > div.xcxtop > div.xcxtop_left > div.gzhtop_logo > h1')      #微信號id      accounts = []      accounts.append(soup.select('div.artcleLeft > div.xcxnry > div.xcxtop > div.xcxtop_left > div.gzhtop_logo > p')[0])      #微信頭像      imgs = soup.select('div.artcleLeft > div.xcxnry > div.xcxtop > div.xcxtop_left > div.gzhtop_logo > img')      #公眾號二維碼      QR_codes= soup.select('div.artcleLeft > div.xcxnry > div.xcxtop > div.xcxtop_right > img')      #介紹      descs = soup.select('div.artcleLeft > div.xcxnry > div.xcxinfo')      #公眾號分類      categorys = []      category = ''      cate = soup.select('div.artcleLeft > div.xcxnry > div.xcxtop > div.xcxtop_left > div.xcx_p > span > a')      if not len(cate) == 0:        category = cate[0].get_text()      else:        category = '綜合'      glock.acquire() #加鎖      for name,account,img,QR_code,desc in zip(names,accounts,imgs,QR_codes,descs):        data = {          'name':name.get_text(),          'category':category,          'account':account.get_text().split(":")[-1],          'img':img['src'],          'QR_code':QR_code['src'],          'desc':desc.get_text()        }        add_data(data,url)      glock.release() #解鎖#添加數據def add_data(data,url):  con = MySQLdb.connect('127.0.0.1','root','root','test',charset="utf8",use_unicode=True)  cursor = con.cursor()  # exit()  insert_sql = """    insert ignore into weixin5(w_name,category,account,img,QR_code,introduce)    VALUES (%s,%s,%s,%s,%s,%s)    """  print('212行 :' + data['name'] + '_' + data['account'] + '添加成功!-' + url)  try:    cursor.execute(insert_sql,(data['name'],data['category'],data['account'],data['img'],data['QR_code'],str(data['desc'])))    con.commit()  except:    ALL_URLS.insert(0,url)    print("218行:" + URL + '插入失敗')    con.rollback()  con.close() # 將時間字符串轉化為時間戳def time_to(dt):  timeArray = time.strptime(dt, "%Y年%m月%d日")  timestamp = int(time.mktime(timeArray))  return timestamp #啟動多線程爬取def main():  for x in range(3):    th = threading.Thread(target=get_info_urls)    th.start()     # get_info_urls()  time.sleep(3)  for x in range(5):    th = threading.Thread(target=get_data)    th.start() if __name__ == '__main__':  # 計時  t1 = time.time()  # 調用函數  get_ip() #獲取ip池  get_page_urls()  time.sleep(2)  # get_categoty_url()  main()  print(time.time() - t1)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美贵妇videos办公室| 成人免费淫片aa视频免费| 5566日本婷婷色中文字幕97| 欧美激情一二区| 久久影视电视剧免费网站| 5278欧美一区二区三区| 日韩精品在线播放| 影音先锋欧美在线资源| 国产欧美一区二区三区在线| 性欧美xxxx视频在线观看| 久久躁日日躁aaaaxxxx| 国产精品午夜视频| 亚洲最大av网站| 国产97在线视频| 北条麻妃在线一区二区| 欧美成人性色生活仑片| 91精品视频观看| 亚洲精品国产精品国产自| 久久精品99国产精品酒店日本| 成人欧美一区二区三区在线湿哒哒| 欧美成人亚洲成人| 日韩欧美成人区| 狠狠躁夜夜躁人人爽天天天天97| 亚洲国产97在线精品一区| 欧美精品中文字幕一区| 亚洲人成电影网站色xx| 日韩经典一区二区三区| 亚洲午夜激情免费视频| 国产丝袜一区视频在线观看| 热久久99这里有精品| 国产精品美腿一区在线看| 成人免费网视频| 亚洲女人初尝黑人巨大| 69久久夜色精品国产69乱青草| 国产精品自拍视频| 亚洲人成电影网站色www| 国产精品91久久久| 17婷婷久久www| 国产精品视频自在线| 亚洲精品美女在线| 亚洲国产精品人人爽夜夜爽| 欧美日韩国产区| 国产精品美乳在线观看| 欧美激情精品久久久久久久变态| 亚洲激情成人网| 狠狠久久五月精品中文字幕| 欧美午夜宅男影院在线观看| 亚洲精品美女在线观看| 国产精品老女人视频| 黑人狂躁日本妞一区二区三区| 精品偷拍一区二区三区在线看| 国产精品丝袜久久久久久高清| 最新国产精品亚洲| 三级精品视频久久久久| 国产一区二区三区免费视频| 91豆花精品一区| 中文字幕日韩免费视频| 亚洲精品福利免费在线观看| 国产有码一区二区| 久久69精品久久久久久国产越南| 91免费看片网站| 国产一区二区在线免费视频| 日韩av观看网址| 欧美日韩日本国产| 国产欧美日韩精品丝袜高跟鞋| 日韩成人av一区| 一区二区在线视频| 亚洲精品影视在线观看| 久久亚洲精品一区二区| 红桃视频成人在线观看| 成人h片在线播放免费网站| 2021国产精品视频| 日韩专区中文字幕| 久久亚洲私人国产精品va| 久久久久久久久久久国产| 热99在线视频| 久久人人爽人人| 欧美国产日本在线| 欧美激情在线一区| 日韩av观看网址| 亚洲电影免费观看高清完整版在线观看| 国产精品劲爆视频| 亚洲第一二三四五区| 91精品国产91| 一区二区三区动漫| 欧美成人免费va影院高清| 欧美综合国产精品久久丁香| 91九色国产社区在线观看| 日韩成人网免费视频| 午夜精品视频网站| 国产精品网红福利| 欧美黄色小视频| 欧美国产高跟鞋裸体秀xxxhd| 91在线国产电影| 国产久一一精品| 中文字幕v亚洲ⅴv天堂| 亚洲色图激情小说| 亚洲欧美一区二区三区情侣bbw| 日韩欧美在线看| 午夜精品三级视频福利| 日本欧美国产在线| 日韩精品中文字幕有码专区| 一区二区三区久久精品| 国产一区二区三区毛片| 中文字幕亚洲二区| 国产精品自拍网| 成人在线观看视频网站| 色婷婷亚洲mv天堂mv在影片| 欧美壮男野外gaytube| 亚洲国产欧美一区二区丝袜黑人| 日韩一区二区三区在线播放| 欧美激情小视频| 久久久久久久网站| 欧美亚洲国产视频小说| 欧美日韩在线视频一区| 日韩精品亚洲元码| 欧美在线播放视频| 亚洲精品第一页| 亚洲人成在线电影| 98精品在线视频| 91国产美女在线观看| 日韩av网站大全| 日韩电影免费观看在线观看| 亚洲免费高清视频| 亚洲国产成人91精品| 日韩av网址在线| 欧美亚洲国产另类| 日韩精品视频在线观看网址| 一本一道久久a久久精品逆3p| 日韩高清a**址| 91在线|亚洲| 国产91在线播放九色快色| 日本19禁啪啪免费观看www| 亚洲精品视频播放| 97涩涩爰在线观看亚洲| 久久九九国产精品怡红院| 欧美激情综合色| 97精品欧美一区二区三区| 亚洲qvod图片区电影| 日韩网站免费观看高清| 亚洲国产中文字幕在线观看| 成人网中文字幕| 久久久精品免费视频| 91国在线精品国内播放| 2023亚洲男人天堂| 亚洲色图狂野欧美| 亚洲伊人久久大香线蕉av| 北条麻妃99精品青青久久| 韩剧1988在线观看免费完整版| 亚洲bt欧美bt日本bt| 国产成人鲁鲁免费视频a| 国产亚洲激情在线| 成人h片在线播放免费网站| 狠狠干狠狠久久| 久久免费视频网站| 欧美日韩中文字幕综合视频| 亚洲在线视频观看| 精品久久久久久中文字幕一区奶水| 夜夜狂射影院欧美极品| 日韩成人av网| 成人精品网站在线观看| 成人福利在线视频| 日本精品久久久久久久| 亚洲欧洲xxxx|