爬蟲 糗事百科爬蟲

2022-08-04 11:09:13 字數 4402 閱讀 2544

糗事百科爬蟲

寫這個爬蟲花了我相當相當多的時間,因為總是爬著爬著就看這糗事百科上的段子去了。。。。

環境:python 3.6

import

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()

直接執行,就可爬取糗事百科13頁段子,儲存在csv檔案中。

爬蟲實戰 糗事百科

閒來無聊,在網上按照教程寫了乙個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...