使用Python选择一个特定的触发器

2024-06-01 04:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

最大的目标是找到具体的房屋账单。 通过这段代码,我试图选择链接:/legislation?q=%7B%22congress%22%3A%22113%22%2C%22chamber%22%3A%22House%22%7D来缩小我对房屋账单的搜索范围

from bs4 import BeautifulSoup
import urllib2

soup = BeautifulSoup(urllib2.urlopen("https://beta.congress.gov/legislation")) 

for link in soup.find_all('a'):
    soup_links = link.get('href') 

import re   

r1 = re.compile(r'/legislation(\?\S+congress\S+chamber\S+House\S+)')
print r1.findall(soup_links)

当我这样做时,我得到的是一个空列表而不是链接

这不是我的常规快车,因为以下几点很有效:

r2 = re.compile(r'\S+congress\S+chamber\S+House\S+')
newstring = '/legislation?q=%7B%22congress%22%3A%22113%22%2C%22chamber%22%3A%22House%22%7D'
print r2.findall(newstring)

Tags: importre链接linklinksurllib2账单compile
1条回答
网友
1楼 · 发布于 2024-06-01 04:22:47

您正在为每个迭代soup_links重新分配一个新值;最后只分配lasthref属性

BeautifulSoup可以为您搜索:

soup = BeautifulSoup(urllib2.urlopen("https://beta.congress.gov/legislation")) 

r1 = re.compile(r'/legislation(\?\S+congress\S+chamber\S+House\S+)')
soup_links = [l['href'] for l in soup.find_all('a', href=r1)]
print soup_links

这将生成一个匹配的链接:

>>> from bs4 import BeautifulSoup
>>> import urllib2
>>> soup = BeautifulSoup(urllib2.urlopen("https://beta.congress.gov/legislation")) 
>>> r1 = re.compile(r'/legislation(\?\S+congress\S+chamber\S+House\S+)')
>>> [l['href'] for l in soup.find_all('a', href=r1)]
['/legislation?q=%7B%22congress%22%3A%22113%22%2C%22chamber%22%3A%22House%22%7D']

如果您只希望一个链接匹配,请使用soup.find()而不是soup.find_all()

soup = BeautifulSoup(urllib2.urlopen("https://beta.congress.gov/legislation")) 

r1 = re.compile(r'/legislation(\?\S+congress\S+chamber\S+House\S+)')
soup_link = soup.find('a', href=r1)
print soup_link['href']

相关问题 更多 >