我正在学习Python,今天的案例是从网页下载文本。
这段代码工作正常:
import urllib2
from bs4 import BeautifulSoup
base_url = "http://www.pracuj.pl"
url = urllib2.urlopen(base_url+"/praca/big%20data;kw").read()
soup = BeautifulSoup(url,"html.parser")
for k in soup.find_all('a'):
if "offer__list_item_link_name" in k['class']:
link = base_url+k['href']
print link
所以它会打印所有这样的链接:
http://www.pracuj.pl/praca/inzynier-big-data-cloud-computing-knowledge-discovery-warszawa,oferta,4212875
http://www.pracuj.pl/praca/data-systems-administrator-krakow,oferta,4204109
http://www.pracuj.pl/praca/programista-java-sql-python-w-zespole-bigdata-krakow,oferta,4204341
http://www.pracuj.pl/praca/program-challenging-projektowanie-i-tworzenie-oprogramowania-katowice,oferta,4186995
http://www.pracuj.pl/praca/program-challenging-analizy-predyktywne-warszawa,oferta,4187512
http://www.pracuj.pl/praca/software-engineer-r-language-krakow,oferta,4239818
当添加一行来分配新地址时,要获取每一行内容:
url2 = urllib2.urlopen(link).read()
我收到错误:
Traceback (most recent call last):
File "download_page.py", line 10, in <module>
url2 = urllib2.urlopen(link).read()
NameError: name 'link' is not defined
有什么问题,它只在for
循环中起作用。当我在循环外添加相同的行时,它可以工作。
你能指出我做错了吗?
的Pawel
答案 0 :(得分:1)
我认为您的行url2 = urllib2.urlopen(link).read()
与link
变量的范围不同。 link
变量是for
循环范围的本地变量,因此如果您在for循环内移动调用它将起作用。
for k in soup.find_all('a'):
if "offer__list_item_link_name" in k['class']:
link = base_url+k['href']
url2 = urllib2.urlopen(link).read()
如果您要处理for循环外的网址,请将链接保存在列表中:
links = []
for k in soup.find_all('a'):
if "offer__list_item_link_name" in k['class']:
link = base_url+k['href']
links.append(link)
for link in links:
#do stuff with link
答案 1 :(得分:0)
这实际上对我有用。你是如何格式化代码的?
我看起来模糊不清:for k in soup.find_all('a'):
if "offer__list_item_link_name" in k['class']:
link = base_url+k['href']
#print link
url2 = urllib2.urlopen(link).read()
print url2
并且工作正常。