使用 BeautifulSoup 从网页中抓取代理 IP
Scraping proxy IPs from a webpage using BeautifulSoup
下面是我的代码,我正在尝试从网站上抓取代理。它正在抓取代理并将它们写入文本文件,但在将最后一个代理写入文本文件后,它也显示此错误。我在这里做错了什么?
def new():
url = 'https://free-proxy-list.net'
page = requests.get(url)
# Turn the HTML into a Beautiful Soup object
soup = BeautifulSoup(page.text,'lxml')
with io.open('C:\Users\Desktop\' + 'proxy.txt','a', encoding='utf8') as logfile:
for tr in soup.find_all('tr')[1:]:
tds = tr.find_all('td')
logfile.write(u"%s:%s\n"%(tds[0].text,tds[1].text))
print(u"\n%s:%s\n"%(tds[0].text,tds[1].text))
错误:-
回溯(最后一次调用):
文件 "C:\Users\AppData\Local\Programs\Python\Python36\yt bot.py",第 69 行,位于
新的()
文件 "C:\Users\AppData\Local\Programs\Python\Python36\yt bot.py",第 64 行,在新的
logfile.write(u"%s:%s\n"%(tds[0].text,tds[1].text))
IndexError: 列表索引超出范围
最后的<tr>
好像是这样的:
<tr>
<th class="input">
<input type="text" />
</th>
...
</tr>
这与其他条目无关,因此您可以安全地跳过它:
for tr in soup.find_all('tr')[1:-1]:
...
或者,使用 try-except
块来捕获 IndexError
也可以:
with io.open(...) as logfile:
for tr in soup.find_all('tr'):
try:
tds = tr.find_all('td')
logfile.write(u"%s:%s\n" % (tds[0].text, tds[1].text))
except IndexError:
pass
顺便说一句,我建议使用 os.path.join
加入文件路径:
os.path.join('C:\Users\Desktop\', 'proxy.txt')
这比使用 +
的简单串联更安全。
下面是我的代码,我正在尝试从网站上抓取代理。它正在抓取代理并将它们写入文本文件,但在将最后一个代理写入文本文件后,它也显示此错误。我在这里做错了什么?
def new():
url = 'https://free-proxy-list.net'
page = requests.get(url)
# Turn the HTML into a Beautiful Soup object
soup = BeautifulSoup(page.text,'lxml')
with io.open('C:\Users\Desktop\' + 'proxy.txt','a', encoding='utf8') as logfile:
for tr in soup.find_all('tr')[1:]:
tds = tr.find_all('td')
logfile.write(u"%s:%s\n"%(tds[0].text,tds[1].text))
print(u"\n%s:%s\n"%(tds[0].text,tds[1].text))
错误:-
回溯(最后一次调用): 文件 "C:\Users\AppData\Local\Programs\Python\Python36\yt bot.py",第 69 行,位于 新的() 文件 "C:\Users\AppData\Local\Programs\Python\Python36\yt bot.py",第 64 行,在新的 logfile.write(u"%s:%s\n"%(tds[0].text,tds[1].text)) IndexError: 列表索引超出范围
最后的<tr>
好像是这样的:
<tr>
<th class="input">
<input type="text" />
</th>
...
</tr>
这与其他条目无关,因此您可以安全地跳过它:
for tr in soup.find_all('tr')[1:-1]:
...
或者,使用 try-except
块来捕获 IndexError
也可以:
with io.open(...) as logfile:
for tr in soup.find_all('tr'):
try:
tds = tr.find_all('td')
logfile.write(u"%s:%s\n" % (tds[0].text, tds[1].text))
except IndexError:
pass
顺便说一句,我建议使用 os.path.join
加入文件路径:
os.path.join('C:\Users\Desktop\', 'proxy.txt')
这比使用 +
的简单串联更安全。