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

刚学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伐。

membalas semua(1)
Peter_Zhu

Saya telah menjalankan kod anda dan mendapati ia kehabisan dua halaman pertama, tetapi mengembalikan kod ralat selepas itu, saya fikir ia adalah kerana anda tidak melakukan pemprosesan anti-merangkak, kerana keputusan anda habis dalam masa satu saat. Apabila ia keluar, 10 lawatan berturut-turut dalam satu saat pastinya bukan sesuatu yang boleh dilakukan oleh manusia.

Banyak tapak web boleh mengetahui bahawa anda menggunakan kod untuk memberus tapak web mereka dan akan melakukan anti-merangkak secara langsung dan menghalang anda daripada mengaksesnya, kerana jika anda tidak melakukan ini , akses terus terlalu banyak kali dalam tempoh yang singkat boleh melumpuhkan tapak web orang lain.

Cadangan saya ialah menunggu 1 saat selepas merangkak halaman dan mengubah suai kod anda:

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)

Saya boleh mendapatkan hasil di sini, tetapi saya ingin mengesyorkan pustaka pihak ketiga yang lain kepada anda, yang dipanggil permintaan Memandangkan anda tahu urllib, ini tidak sukar, tetapi ia lebih mesra pengguna untuk digunakan dan ia berfungsi dengannya perpustakaan BeatuifulSoup ( (digunakan untuk menghuraikan dan memproses teks HTML) sangat mudah. ​​Anda juga boleh mencari dalam talian untuk mengetahui lebih lanjut.

Selain itu, apabila melakukan crawler pada masa hadapan, anda mesti memberi perhatian untuk mencegah anti-crawling!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!