Python爬蟲實戰 糗事百科

2021-07-11 11:02:50 字數 2863 閱讀 6295

前面我們已經說了那麼多基礎知識了,下面我們做個實戰專案來挑戰一下吧。這次就用前面學的urllib和正規表示式來做,python爬蟲爬取糗事百科的小段子。

爬取前我們先看一下我們的目標:

1.抓取糗事百科熱門段子

2.過濾帶有的段子

首先我們確定好頁面的url,糗事百科的**是:但是這個url不方便我們後面連續抓取,我們可以看一下第二頁就知道url如何構造了,url是/?s=4872200,其中中間的數字1代表頁數,我們可以傳入不同的值來獲得某一頁的段子內容,其他的部分是不變的。

我們先看看最基本的頁面抓取方式,看看會不會成功

import urllib2

page=1

url = ''+str(page)+'/?s=4872200'

try:

request = urllib2.request(url)

response = urllib2.urlopen(request)

print response.read()

except urllib2.urlerror, e:

if hasattr(e,"code"):

print e.code

if hasattr(e,"reason"):

print e.reason

結果出現 raise badstatusline(line)  httplib.badstatusline: '',我們需要加上headers驗證,如下:

import urllib2

page=1

url = ''+str(page)+'/?s=4872200'

user_agent ='mozilla/4.0(compatible;msie 5.5;windows nt)'

headers=

try:

request = urllib2.request(url,headers = headers)

response = urllib2.urlopen(request)

print response.read()

except urllib2.urlerror, e:

if hasattr(e,"code"):

print e.code

if hasattr(e,"reason"):

print e.reason

好啦,執行正常,頁面**也列印出來了。

2、用正規表示式提取段子

我們先看審查元素,看一下**,如下圖:

每個段子都在乙個盒子裡,...

現在我們需要

content = response.read().decode('utf-8')

pattern = re.compile('.*?.*?.*?.*?.*?content">'+

'(.*?)

.*?.*?vote".*?number">(.*?).*?stats-comments".*?(.*?)',re.s)

items = re.findall(pattern,content)

for item in items :

print item[0],item[1],item[2],item[3]

看一下爬出來的段子:

好啦下面我們把**完整的留下,加了乙個小迴圈,爬取10頁:

# _*_ coding:utf-8 _*_

import urllib2

import re

page=1

print u"第%d頁"%page

while page < 10:

url = '' + str(page) + '/?s=4872200'

user_agent ='mozilla/4.0(compatible;msie 5.5;windows nt)'

headers=

try:

request = urllib2.request(url,headers = headers)

response = urllib2.urlopen(request)

content = response.read().decode('utf-8')

pattern = re.compile('.*?.*?.*?.*?.*?content">' +

'(.*?)

.*?.*?vote".*?number">(.*?).*?stats-comments".*?(.*?)',re.s)

items = re.findall(pattern,content)

for item in items :

print item[0],item[1],item[2],item[3]

except urllib2.urlerror, e:

if hasattr(e,"code"):

print e.code

if hasattr(e,"reason"):

print e.reason

page = page + 1

print u"第%d頁"%page

好啦,**比較糙,大家可以自己試試!

爬蟲實戰 糗事百科

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