【发布时间】:2020-04-29 22:10:28
【问题描述】:
我正在网页抓取一个包含美国开放Christmas tree farms 的网站。我的最终目标是获取每个农场的电话名称、号码、地址和电子邮件。虽然这是我的最终目标,但我还没有编码那么远,所以请只在我遇到困难的地方帮助我。我也想尽可能地贴近我的代码,以便我能理解它(我对此很陌生),但当然感谢其他建议。
我首先抓取了主页,其中有一个带有嵌入式链接的状态表。我能够在我的第一个代码块中收集所有这些链接。在各州内,有一张显示每个县的地图(带有另一个嵌入式链接)。我现在正试图抓住每个链接。我能够用类似于我显示的第一个代码块的东西来做一个状态,但我想循环通过以消除不必要的/重复的代码。我尝试创建一个循环,但我的.text 命令出现错误。我假设我抓取的每个链接最后都需要有一个.text,就像我的source 变量一样。所以我尝试添加它,但显然有问题。有什么建议吗?
source = requests.get('http://www.pickyourownchristmastree.org/').text
soup = BeautifulSoup(source, 'lxml')
concatenate = 'http://www.pickyourownchristmastree.org/'
find_state_group = soup.find('div', class_ = 'alert')
for link in find_state_group.find_all('a', href=True):
if 'xmastrees' in link['href']:
states = concatenate + link['href']
i = 1
for source_state in states:
source_state = states[-1 + i:]
x = source_state().text
soup_state = BeautifulSoup(x, 'lxml')
state_county = soup_state.find('div', class_='alert')
for county_link in state_county.find_all('area', href=True):
if '.php' in county_link['href']:
county_link_update = concatenate + county_link['href']
print(county_link_update)
i = i + 1
x = source_state().text
TypeError: 'str' object is not callable
【问题讨论】:
-
我认为这里的问题是,对于每个 source_state 链接,您需要创建另一个
requests.get(url)才能获取该页面的内容。我对您的状态 = 连接 + 链接线有点困惑。您不应该将所有状态存储在列表中吗?第二个 for 循环似乎你已经完成了。 -
我应该有
x=requests.get(source_state).text。是的,states应该在列表中。我注意到,当我尝试仅索引前 5 个链接时,情况并非如此。我怎样才能把它变成列表形式?
标签: python web-scraping pycharm