recherche

Maison  >  Questions et réponses  >  le corps du texte

python爬虫如何批量爬取糗事百科段子

刚学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
伊谢尔伦伊谢尔伦2767 Il y a quelques jours757

répondre à tous(1)je répondrai

  • 天蓬老师

    天蓬老师2017-04-18 10:22:18

    J'ai exécuté votre code et j'ai constaté qu'il manquait les deux premières pages, mais j'ai renvoyé un code d'erreur par la suite. Je pense que c'est parce que vous n'avez pas effectué de traitement anti-exploration, car votre résultat a été épuisé en une seconde. À sa sortie, 10 visites consécutives en une seconde n'est certainement pas quelque chose que les humains peuvent faire.

    De nombreux sites Web peuvent savoir que vous utilisez du code pour brosser leur site Web. Certains sites Web détestent cela et effectueront un anti-crawling. Ils peuvent bloquer directement votre adresse IP et vous empêcher d'y accéder, car si vous ne le faites pas. , un accès direct trop répété sur une courte période de temps peut paralyser les sites Web d'autres personnes.

    Ma suggestion est d'attendre 1 seconde après avoir exploré une page et de modifier votre code :

    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)

    Je peux obtenir des résultats ici, mais j'aimerais vous recommander une autre bibliothèque tierce, appelée requêtes. Puisque vous connaissez urllib, ce n'est pas difficile, mais c'est plus convivial à utiliser et cela fonctionne avec. la bibliothèque BeatuifulSoup ( (utilisée pour analyser et traiter le texte HTML) est très pratique. Vous pouvez également effectuer une recherche en ligne pour en savoir plus.

    De plus, lorsque vous ferez des robots à l'avenir, vous devez faire attention à éviter l'anti-crawling !

    répondre
    0
  • Annulerrépondre