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])

结果是:

http://millersamuel.com/aggy-data/home/query_report?area=38&housing_type=3&measure=4&query_type=quarterly&region=1&year_end=2020&year_start=1980 23

http://millersamuel.com/aggy-data/home/query_report?area=23&housing_type=1&measure=4&query_type=annual&region=1&year_end=2020&year_start=1980 23

如您所见,它吐出区号“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&region=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])