刚学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
コードを実行したところ、最初の 2 ページが使い果たされたことがわかりましたが、その後はエラー コードが返されました。結果は 1 秒以内に返されたためです。 1秒以内に連続して訪問することは決して人間にできることではありません。
多くの Web サイトは、あなたが Web サイトをブラッシングするためにコードを使用していることを知ることができます。一部の Web サイトは、これを嫌い、Web サイトにアクセスできないように、あなたの IP を直接ブロックする可能性があります。はい、短期間に何度も直接アクセスすると、Web サイトが麻痺する可能性があります。
私の提案は、ページをクロールした後 1 秒待ってコードを変更することです。
リーリーここで結果を取得できますが、urllib についてはご存知なので、これは難しいことではありませんが、BeatuifulSoup で動作する、別のサードパーティ ライブラリをお勧めします。ライブラリ (HTML テキストを解析して処理するのに非常に便利です。オンラインで検索して詳細を確認することもできます。
また、今後ハイハイをする際にはアンチハイハイ防止にも注意が必要です!