我得到这段代码来吐出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])
结果是:
正如您所看到的那样,它会向区域号码'23'吐出区域号码,该区号仅在此URL中,而不是另一个URL的'38'。
答案 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®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)
使用过的功能:
答案 1 :(得分:0)
您需要更改:
print(link[j:g]) to print(x[j:g])