python - 美汤如何刮经纬度

标签 python web-scraping beautifulsoup

我对 BeautifulSoup4 相当陌生,在从以下代码的 html 响应中提取纬度和经度值时遇到困难。

url = 'http://cinematreasures.org/theaters/united-states?page=1' 
r = requests.get(url)
soup = BeautifulSoup(r.content)
links = soup.findAll("tr")
print links

此代码多次打印此响应。

<tr class="even location theater" data="{id: 0, point: {lng: -94.1751038, lat: 36.0848965}

完整的tr响应

<tr>\n
  <th id="theater_name"><a href="/theaters/united-states?sort=name&amp;order=desc">\u2191 Name</a>
  </th>\n
  <th id="theater_location"><a href="/theaters/united-states?sort=location&amp;order=asc">Location</a>
  </th>\n
  <th id="theater_status"><a href="/theaters/united-states?sort=open&amp;order=desc">Status</a>
  </th>\n
  <th id="theater_screens"><a href="/theaters/united-states?sort=screens&amp;order=asc">Screens</a>
  </th>\n</tr>,
<tr class="even location theater" data="{id: 0, point: {lng: -94.1751038, lat: 36.0848965}, category: 'open'}">\n
  <td class="name">\n
    <a class="map-link" href="/theaters/8775">
      <img alt="112 Drive-In" height="48" src="http://photos.cinematreasures.org/production/photos/22137/1313612883/thumb.JPG?1313612883" width="48" />
    </a>\n<a class="map-link" href="/theaters/8775">112 Drive-In</a>\n
    <div class="info-box">\n
      <div class="photo" style="float: left;">
        <a href="/theaters/8775">
          <img alt="thumb" height="48" src="http://photos.cinematreasures.org/production/photos/22137/1313612883/thumb.JPG?1313612883" width="48" />
        </a>
      </div>\n
      <p style="min-width: 200px !important;">\n<strong><a href="/theaters/8775">112 Drive-In</a></strong>\n
        <br>\n 3352 Highway 112 North
        <br>Fayetteville, AR 72702
        <br>United States
        <br>479.442.4542
        <br>\n</br>
        </br>
        </br>
        </br>
        </br>
      </p>\n</div>\n</td>\n
  <td class="location">\n Fayetteville, AR, United States\n</td>\n
  <td class="status">\n Open\n</td>\n
  <td class="screens">\n 1\n</td>\n</tr>

我该如何从这个响应中获取 lng 和 lat 值?

提前谢谢您。

最佳答案

这是我的方法:

import requests
import demjson
from bs4 import BeautifulSoup

url = 'http://cinematreasures.org/theaters/united-states?page=1'
page = requests.get(url)
soup = BeautifulSoup(page.text)

to_plain_coord = lambda d: (d['point']['lng'], d['point']['lat'])
# Grabbing theater coords if `data` attribute exists
coords = [
    to_plain_coord(demjson.decode(t.attrs['data']))
    for t in soup.select('.theater')
    if 'data' in t.attrs]

print(coords)

我不使用任何字符串操作。相反,我从 data 属性加载 JSON。不幸的是,这里的 JSON 不太有效,因此我使用 demjson 库进行 json 解析。

pip install demjson

关于python - 美汤如何刮经纬度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638804/

相关文章:

python - 我正在尝试使用 Xpath 从电视节目中检索脚本,但它返回的是一个空列表

python - 带有 BS4 的简单蜘蛛神秘地将每个页面翻倍

python - 根据列表替换字符串中的子字符串

python - 查找特定字典键具有特定值的所有行

javascript - 使用 Selenium 修改 Javascript Navigator 对象

javascript - 超过 Google 电子表格的 ImportXML 限制

python - 在 get_text() 中用 <br> 标签分隔

python - 使用 beautifulsoup 抓取公交车站网页

python - 我们可以在@classmethod 函数中调用用户定义的实例方法吗?

python - 从不同目录实例化Python子类