python爬虫如何批量爬取糗事百科段子
伊谢尔伦
伊谢尔伦 2017-04-18 10:20:18
0
1
776

刚学Python不会scrapy框架,就是想做个简单爬虫实现抓取前10页段子(前N页)。请问不用scrapy能有什么简单一些的代码能实现?之前有试过在page那里加for循环,但是也只能抓到一个页面,不知道怎么弄。

import urllib
import urllib2
import re

page = 1
url = 'http://www.qiushibaike.com/8hr/page/' + str(page)
user_agent = 'Mozilla/5.0 ( Windows NT 6.1)'
headers = { 'User-Agent' : user_agent }

try:
    request = urllib2.Request(url,headers = headers)
    response = urllib2.urlopen(request)
    content = response.read().decode('utf-8')
    pattern = re.compile('<p.*?class="content">.*?<span>(.*?)</span>.*?</p>.*?',re.S)
    items = re.findall(pattern,content)
    for item in items:
        print item

except urllib2.URLError, e:
    if hasattr(e,"code"):
        print e.code
    if hasattr(e,"reason"):
        print e.reason
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回覆(1)
Peter_Zhu

我跑了一下你的程式碼,發現能跑出前2個頁面,後面都回傳了一個錯誤碼,我覺得是因為你沒做防反爬處理,因為你這個結果在一秒鐘內就跑出來了,一秒內連續10次訪問肯定不是人能做到的。

很多網站都能知道你這是用程式碼在刷他們的網站,有些網站很討厭這個,會做反爬處理,可能直接把你的IP 都給封了,讓你沒法訪問,因為如果不這樣做,短時間內直接訪問太多次的話可能會把人家的網站都弄癱瘓了。

我的建議是每爬完一個頁面等待1秒,修改了下你的程式碼:

import urllib
import urllib2
import re
import time

for page in range(1, 11):
    print('at page %s' % page)
    url = 'http://www.qiushibaike.com/8hr/page/' + str(page)
    user_agent = 'Mozilla/5.0 ( Windows NT 6.1)'
    headers = { 'User-Agent' : user_agent }

    try:
        request = urllib2.Request(url,headers = headers)
        response = urllib2.urlopen(request)
        content = response.read().decode('utf-8')
        pattern = re.compile('<p.*?class="content">.*?<span>(.*?)</span>.*?</p>.*?',re.S)
        items = re.findall(pattern,content)
        for item in items:
            print item

    except urllib2.URLError, e:
        if hasattr(e,"code"):
            print e.code
        if hasattr(e,"reason"):
            print e.reason
    
    time.sleep(1)

我這邊是能出結果的,不過我想向你推薦另一個第三方的庫,叫requests,既然你會urllib,這也就不難,但是使用起來更人性化,配合BeatuifulSoup 庫(用來解析和處理HTML 文字的)很方便,你也可以去網上搜一下,了解一下。

還有就是以後做爬蟲一定要注意做防反爬處理!

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板