糗事百科爬蟲
寫這個爬蟲花了我相當相當多的時間,因為總是爬著爬著就看這糗事百科上的段子去了。。。。
環境:python 3.6
import直接執行,就可爬取糗事百科13頁段子,儲存在csv檔案中。csvimport
json
import
random
import
requests
from bs4 import
beautifulsoup
class
qiushibaike(object):
def__init__
(self):
#作為儲存爬取資訊的容器
self.agent_info_list =
#作為待會兒拼接url的一部分
self.home_url = '
'#開始的url
self.base_url = '
'#headers中的user-agent列表,每次請求url隨機從中取出乙個
self.headers_value =[
'', ''
, ''
, ''
, ''
, ''
,
'mozilla/5.0 (windows nt 10.0; wow64; rv:50.0) gecko/20100101 firefox/50.0',
'',
'mozilla/5.0 (windows nt 6.1; wow64; rv:50.0) gecko/20100101 firefox/50.0',
'']
#請求頭
self.headers =
defstar_requests(self,base_url):
#請求開始的url 返回其content
star_html = requests.get(base_url,headers=self.headers).content
return
star_html
defnalysis_data(self,star_html,page):
while 1:
#翻頁處理
star_url = '
' %page
#生成beautifusoup格式
star_soup = beautifulsoup(star_html, '
lxml')
#確定最大頁數,最大頁數為 class為'pagination'的ul標籤中倒數第二『li』標籤
max_page = star_soup.find('
ul', class_='
pagination
').find_all('
li')[-2].text.strip()
#最大頁數處理
if page <=int(max_page):
qiushi_html = requests.get(star_url,headers=self.headers).content
qiushi_soup = beautifulsoup(qiushi_html,'
lxml')
details_list = qiushi_soup.select('
#content-left .article')
#取出所有糗事的詳情頁,因為個別糗事文字過多顯示不全。
for details in
details_list:
details_url = self.home_url + details['
id'].replace('
qiushi_tag_
',''
)
#請求 糗事詳情頁
details_html = requests.get(details_url,headers=self.headers).content
details_soup = beautifulsoup(details_html,'
lxml')
#儲存資訊,糗事詳情的字典
agent_info_dict ={}
agent_info_dict[
'使用者名稱
'] = details_soup.find('
div',class_='
author clearfix
').find('h2'
).text.strip()
gender_div = details_soup.find('
div', '
articlegender')
#個別糗事 使用者為匿名,這裡預設年齡為未知,性別為保密
ifgender_div:
agent_info_dict['年齡
'] =gender_div.text.strip()
if gender_div['
class
'][1].replace('
icon
','') == '
man'
: agent_info_dict['性別
'] = '男'
else
: agent_info_dict['性別
'] = '女'
else
: agent_info_dict['性別
'] = '保密'
agent_info_dict['年齡
'] = '未知'
agent_info_dict['內容
'] = details_soup.find('
div',class_='
content
').text.strip()
agent_info_dict[
'點讚數
'] = details_soup.find('
span
','stats-vote
').find('i'
).text.strip()
#將每乙個糗事詳細的地點新增到 詳情列表中
print("
第 %d 頁儲存完畢
" %page)
#頁數加1
page += 1
#如果頁數不滿足 <=13 則爬蟲結束
else
:
break
defkeep_file(self):
json.dump(self.agent_info_list,open(
'qiushibaike.json
','w'))
defjson_to_cv(self):
#1.讀取json檔案
json_file = open('
qiushibaike.json
', 'r'
)
#2.建立csv檔案物件
csv_file = open('
qiushibaike.csv
', 'w'
)
#3.建立寫入器
csv_witer =csv.writer(csv_file)
data_list =json.load(json_file)
#4. 提取表頭
sheet_title =data_list[0].keys()
#5. 提取內容
content_list =
for dict_data in
data_list:
#6.寫入表頭
csv_witer.writerow(sheet_title)
#7.寫入內容
csv_witer.writerows(content_list)
#8.關閉檔案
csv_file.close()
json_file.close()
defrun(self):
star_html =self.star_requests(self.base_url)
self.nalysis_data(star_html,1)
self.keep_file()
self.json_to_cv()
if__name__ == '
__main__':
star =qiushibaike()
star.run()
爬蟲實戰 糗事百科
閒來無聊,在網上按照教程寫了乙個python爬蟲,就是竊取資料然後儲存下來爬蟲實戰 糗事百科。從糗百上爬取段子,然後輸出到console,我改了一下儲存到了資料庫。不扯沒用的,直接上 這是爬取得部分 usr bin python coding utf 8 import urllib import u...
python爬蟲糗事百科
coding utf 8 import urllib2 import re 工具類 class tools object remove n re.compile r n replace br re.compile r remove ele re.compile r re.s rs 引數,要進行替換的...
Python爬蟲 糗事百科
如果沒有這兩個庫 在命令列任意位置下 前提是你已經配置好了環境,這個網上大把,自行google pip install requests,pip install bs4 import beautifulsoup import requests from bs4 import beautifulsou...