刚学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
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 :
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 !