gpt4 book ai didi

python - 使用 beautiful soup python 循环抓取 URL

转载 作者:行者123 更新时间:2023-12-01 05:32:18 25 4
gpt4 key购买 nike

我正在使用以下代码来抓取网站。我尝试过的以下内容适用于网站中的页面。现在,我想抓取几个这样的页面,我将为其循环 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 的数据时抓取数据。

最佳答案

您可以 try catch 结果( 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

或者使用一个(很棒的)库,例如 requests抓取前检查

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 之前,您无法知 Prop 有该 id 的页面是否存在。

关于python - 使用 beautiful soup python 循环抓取 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19936790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com