[英]Loop URL to scrape using beautiful soup python
我正在使用以下代码来抓取网站。 我尝试过的以下内容对于网站上的页面效果很好。 现在,我要抓取几个这样的页面,如下所示,这些页面我正在为其循环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
数据时,如何跳过这些页面并刮取数据。
您可以尝试捕获结果( https://stackoverflow.com/questions/6092992/why-is-it-easier-to-ask-forgiveness-than-permission-in-python-but-not-in-java ) :
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
或使用(great)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的页面是否存在。
尝试在该网站上找到索引页面,否则,在尝试访问URL之前您根本无法分辨
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.