我使用以下代码来抓取网站。我试过的以下内容适用于网站中的页面。现在我要抓几个这样的页面,我正在循环URL,如下所示。
from bs4 import BeautifulSoup
import urllib2
import csv
import re
number = 2500
for i in xrange(2500,7000):
page = urllib2.urlopen("http://bvet.bytix.com/plus/trainer/default.aspx?id={}".format(i))
soup = BeautifulSoup(page.read())
for eachuniversity in soup.findAll('fieldset',{'id':'ctl00_step2'}):
print re.sub(r'\s+',' ',','.join(eachuniversity.findAll(text=True)).encode('utf-8'))
print '\n'
number = number + 1
以下是没有循环的普通代码
from bs4 import BeautifulSoup
import urllib2
import csv
import re
page = urllib2.urlopen("http://bvet.bytix.com/plus/trainer/default.aspx?id=4591")
soup = BeautifulSoup(page.read())
for eachuniversity in soup.findAll('fieldset',{'id':'ctl00_step2'}):
print re.sub(r'\s+',' ',''.join(eachuniversity.findAll(text=True)).encode('utf-8'))
我将URL中的id
值从2500循环到7000.但是有许多id
没有值。所以没有这样的页面。如果存在给定id
的数据,我如何跳过这些页面并抓取数据。
答案 0 :(得分:2)
for i in xrange(2500,7000):
try:
page = urllib2.urlopen("http://bvet.bytix.com/plus/trainer/default.aspx?id={}".format(i))
except:
continue
else:
soup = BeautifulSoup(page.read())
for eachuniversity in soup.findAll('fieldset',{'id':'ctl00_step2'}):
print re.sub(r'\s+',' ',','.join(eachuniversity.findAll(text=True)).encode('utf-8'))
print '\n'
number = number + 1
或使用requests之类的(精彩)lib并在废弃之前进行检查
import requests
for i in xrange(2500,7000):
page = requests.get("http://bvet.bytix.com/plus/trainer/default.aspx?id={}".format(i))
if not page.ok:
continue
soup = BeautifulSoup(requests.text)
for eachuniversity in soup.findAll('fieldset',{'id':'ctl00_step2'}):
print re.sub(r'\s+',' ',','.join(eachuniversity.findAll(text=True)).encode('utf-8'))
print '\n'
number = number + 1
在调用url之前,基本上没有办法知道具有该id的页面是否存在。
答案 1 :(得分:0)
尝试在该网站上找到索引页面,否则,在尝试访问该网址之前,您根本无法判断