For Loop不会吐出所需的结果

时间:2016-10-03 11:23:41

标签: python python-3.x loops beautifulsoup urllib3

我得到这段代码来吐出URL中唯一的“区号”。但是,循环不起作用。它会吐出相同的数字,请参阅下文:

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'。

2 个答案:

答案 0 :(得分:1)

您的代码中存在拼写错误。迭代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])

我还想向您展示从网址中提取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)

使用过的功能:

答案 1 :(得分:0)

  

您需要更改:

print(link[j:g]) to print(x[j:g])