Python3--爬取数据之911网站信息爬取
生活随笔
收集整理的這篇文章主要介紹了
Python3--爬取数据之911网站信息爬取
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上代碼:
#*************************************************** #這份代碼用于從911網站上爬取信息 #其中的IP.txt文件為我本地存IP的文件 # #***************************************************import requests,csv import pandas as pd import time,random from bs4 import BeautifulSoup from fake_useragent import UserAgent#利用pandas讀取csv文件 def getNames(csvfile):data = pd.read_csv(csvfile) # 1--讀取的文件編碼問題有待考慮names = data['name']return names''' 獲取IP列表 事先已經在網上爬取了大量ip地址存入IP.txt中 IP地址的獲取方法參照我的另一篇博客( Python--代理IP) ''' def get_ip_list(): f=open('IP.txt','r') ip_list=f.readlines() f.close() return ip_list #從IP列表中獲取隨機IP def get_random_ip(ip_list): proxy_ip = random.choice(ip_list) proxy_ip=proxy_ip.strip('\n') proxies = {'http': proxy_ip} return proxies#爬取網頁并返回所需信息以及狀態碼 def parsePage(url,ip_list):fuck_header= {'User-Agent':str(UserAgent().random)}proxies = get_random_ip(ip_list)try:r = requests.get(url, proxies=proxies, headers=fuck_header, timeout=10,verify=False) #verify設置為False,Requests也能忽略對SSL證書的驗證。except: #2--verify的說明有待補充print('運行錯誤,程序暫停20秒')time.sleep(20)fuck_header= {'User-Agent':str(UserAgent().random)}proxies = get_random_ip(ip_list)r = requests.get(url, proxies=proxies, headers=fuck_header, timeout=10, verify=False)if r.status_code == 200: #狀態碼status_code為200代表爬取成功,為404則為未爬取到相關信息soup = BeautifulSoup(r.text, 'lxml')body = soup.find("div", class_="pp")contents = body.find_all('p')return r.status_code, contentselse: return r.status_code, Nonedef getDict(contents):namesChineseTransliteration = [] #中文音譯namesGender = [] #名字性別namesFromLanguage = [] #來源語種namesMoral = [] #名字寓意namesImpression = [] #名字印象namesMeaning = [] #名字含義#get_text() 方法,這個方法獲取到tag中包含的所有文版內容包括子孫tag中的內容,并將結果作為Unicode字符串返回#[4:]:讀取第五的字符以后的字符namesChineseTransliteration.append(contents[1].get_text()[4:])namesGender.append(contents[-5].get_text()[4:])namesFromLanguage.append(contents[-4].get_text()[4:]) namesMoral.append(contents[-3].get_text()[4:]) namesImpression.append(contents[-2].get_text()[4:])namesMeaning.append(contents[-1].get_text()[4:])str_row=namesChineseTransliteration+namesGender+namesFromLanguage+namesMoral+namesImpression+namesMeaningreturn str_row#功能:將信息寫入文件 def write_file(filePath,row): with open(filePath,'a+',encoding='utf-8',newline='') as csvfile: spanreader = csv.writer(csvfile,delimiter='|',quoting=csv.QUOTE_MINIMAL) spanreader.writerow(row)if __name__ == "__main__":for i in range(26,27):names = getNames("{}.csv".format(i)) #獲取需要爬取文件的名字base_url = "https://myingwenming.911cha.com/" #kzb--在地址后面追加了xm_ip_list = get_ip_list()for j in range(len(names)):url = base_url + names[j] + ".html"status_code, contents = parsePage(url,ip_list) print(names[j], status_code)if status_code == 200: #狀態碼為200爬取成功,狀態碼為404爬取失敗str_row = getDict(contents)# row = names[j]+str_rowtemp = []temp.append(names[j])row = temp + str_rowwrite_file("爬取成功的人名/new{}.csv".format(i),row) else:continue?
歡迎留言交流!
總結
以上是生活随笔為你收集整理的Python3--爬取数据之911网站信息爬取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python3--批量爬取数据之调金山词
- 下一篇: Python--format()学习记录