刚学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
귀하의 코드를 실행한 결과 처음 두 페이지가 모두 실행될 수 있는 것으로 나타났습니다. 하지만 한 페이지 내에 결과가 종료되었기 때문에 크롤링 방지 처리를 수행하지 않았기 때문에 각 페이지마다 오류 코드가 반환되는 것 같습니다. 둘째, 1초에 10번 연속 방문하는 것은 확실히 인간이 할 수 있는 일이 아닙니다.
많은 웹사이트에서는 귀하가 자신의 웹사이트를 브러싱하기 위해 코드를 사용하고 있다는 사실을 알 수 있습니다. 일부 웹사이트에서는 이를 싫어하고 크롤링 방지 기능을 수행하여 귀하의 IP를 직접 차단하고 액세스하지 못하게 할 수도 있습니다. , 짧은 시간 내에 너무 자주 직접 액세스하면 다른 사람의 웹사이트가 마비될 수 있습니다.
페이지를 크롤링한 후 1초 동안 기다렸다가 코드를 수정하는 것이 좋습니다.
으아아아여기서 결과를 얻을 수 있지만, request라고 하는 또 다른 타사 라이브러리를 추천하고 싶습니다. 귀하가 urllib를 알고 있으므로 이는 어렵지 않지만 사용하기 더 쉽고 함께 작동합니다. BeatuifulSoup 라이브러리((HTML 텍스트를 구문 분석하고 처리하는 데 사용됨)는 매우 편리합니다. 온라인으로 검색하여 자세한 내용을 알아볼 수도 있습니다.
또한 앞으로 크롤러를 할 때 크롤링 방지에 주의하셔야 합니다!