For Loop 没有吐出所需的结果
For Loop doesn't spit out needed results
我得到这段代码吐出了URL中唯一的"area number"。但是,循环不起作用。它吐出相同的数字,请看下面:
import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
url = open('MS Type 1 URL.txt',encoding='utf-8-sig')
links = []
for link in url:
y = link.strip()
links.append(y)
url.close()
print('Amount of Links: ', len(links))
for x in links:
j = (x.find("=") + 1)
g = (x.find('&housing'))
print(link[j:g])
结果是:
如您所见,它吐出区号“23”,它仅在其中一个 URL 中,而不是另一个 URL 的“38”。
您的代码中有错字。您迭代 links
列表并将其元素绑定到 x
变量,但打印一片 link
变量,因此您在每次循环迭代中打印相同的字符串。所以你可以将 print(link[j:g])
更改为 print(x[j:g])
,但是最好用更具描述性的名称来调用你的变量,所以这里是你的循环的固定版本:
for link in links:
j = link.find('=') + 1
g = link.find('&housing')
print(link[j:g])
我还想向您展示一种从 URL 中提取 area
值的正确方法:
from urllib.parse import urlparse, parse_qs
url = 'http://millersamuel.com/aggy-data/home/query_report?area=38&housing_type=3&measure=4&query_type=quarterly®ion=1&year_end=2020&year_start=1980'
area = parse_qs(urlparse(url).query)['area'][0]
所以不用str.find
方法,你可以这样写:
for url in urls:
parsed_qs = parse_qs(urlparse(url).query)
if 'area' in parsed_qs:
area = parsed_qs['area'][0]
print(area)
使用的函数:
You need to change:
print(link[j:g]) to print(x[j:g])
我得到这段代码吐出了URL中唯一的"area number"。但是,循环不起作用。它吐出相同的数字,请看下面:
import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
url = open('MS Type 1 URL.txt',encoding='utf-8-sig')
links = []
for link in url:
y = link.strip()
links.append(y)
url.close()
print('Amount of Links: ', len(links))
for x in links:
j = (x.find("=") + 1)
g = (x.find('&housing'))
print(link[j:g])
结果是:
如您所见,它吐出区号“23”,它仅在其中一个 URL 中,而不是另一个 URL 的“38”。
您的代码中有错字。您迭代 links
列表并将其元素绑定到 x
变量,但打印一片 link
变量,因此您在每次循环迭代中打印相同的字符串。所以你可以将 print(link[j:g])
更改为 print(x[j:g])
,但是最好用更具描述性的名称来调用你的变量,所以这里是你的循环的固定版本:
for link in links:
j = link.find('=') + 1
g = link.find('&housing')
print(link[j:g])
我还想向您展示一种从 URL 中提取 area
值的正确方法:
from urllib.parse import urlparse, parse_qs
url = 'http://millersamuel.com/aggy-data/home/query_report?area=38&housing_type=3&measure=4&query_type=quarterly®ion=1&year_end=2020&year_start=1980'
area = parse_qs(urlparse(url).query)['area'][0]
所以不用str.find
方法,你可以这样写:
for url in urls:
parsed_qs = parse_qs(urlparse(url).query)
if 'area' in parsed_qs:
area = parsed_qs['area'][0]
print(area)
使用的函数:
You need to change:
print(link[j:g]) to print(x[j:g])