찾다

 >  Q&A  >  본문

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
伊谢尔伦伊谢尔伦2778일 전773

모든 응답(1)나는 대답할 것이다

  • 天蓬老师

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

    귀하의 코드를 실행한 결과 처음 두 페이지가 모두 실행될 수 있는 것으로 나타났습니다. 하지만 한 페이지 내에 결과가 종료되었기 때문에 크롤링 방지 처리를 수행하지 않았기 때문에 각 페이지마다 오류 코드가 반환되는 것 같습니다. 둘째, 1초에 10번 연속 방문하는 것은 확실히 인간이 할 수 있는 일이 아닙니다.

    많은 웹사이트에서는 귀하가 자신의 웹사이트를 브러싱하기 위해 코드를 사용하고 있다는 사실을 알 수 있습니다. 일부 웹사이트에서는 이를 싫어하고 크롤링 방지 기능을 수행하여 귀하의 IP를 직접 차단하고 액세스하지 못하게 할 수도 있습니다. , 짧은 시간 내에 너무 자주 직접 액세스하면 다른 사람의 웹사이트가 마비될 수 있습니다.

    페이지를 크롤링한 후 1초 동안 기다렸다가 코드를 수정하는 것이 좋습니다.

    으아아아

    여기서 결과를 얻을 수 있지만, request라고 하는 또 다른 타사 라이브러리를 추천하고 싶습니다. 귀하가 urllib를 알고 있으므로 이는 어렵지 않지만 사용하기 더 쉽고 함께 작동합니다. BeatuifulSoup 라이브러리((HTML 텍스트를 구문 분석하고 처리하는 데 사용됨)는 매우 편리합니다. 온라인으로 검색하여 자세한 내용을 알아볼 수도 있습니다.

    또한 앞으로 크롤러를 할 때 크롤링 방지에 주의하셔야 합니다!

    회신하다
    0
  • 취소회신하다