【问题标题】:Web Scraping with Python Request/lxml: Getting data from ul/li使用 Python Request/lxml 进行网页抓取:从 ul/li 获取数据
【发布时间】:2017-06-18 13:24:24
【问题描述】:

所以我对此很陌生,我无法在谷歌上找到关于这个问题的任何内容。

我将 requestlxmlPython 一起使用,我已经看到有很多不同的网络抓取模块,但是有什么理由选择其中一个吗?你可以用 requests/lxml 做同样的事情吗,比如 BeautifulSoup?

无论如何,这是我的实际问题;

这是我的代码:

import requests
from lxml import html

# Login data
inputUrl = 'http://forum.mytestsite.com/login'
usr = 'myusername'
pwd = 'mypassword'
payload = dict(login=usr, password=pwd)

# Open session
with requests.Session() as s:
    # Login
    s.post(inputUrl, data=payload)

    # Get page data
    pageResult = s.get('http://forum.mytestsite.com/icons/', allow_redirects=False)
    pageResult = html.fromstring(pageResult.content)
    pageIcons = pageResult.xpath('//script[@id="table-icons"]/text()')
    print pageIcons[0]

打印pageIcons[0]时的结果

<ul id="icons">
{{#each icons}}
   <li data-handle="{{handle}}">
     <img src="{{image_path}}" alt="{{desc_or_name this}}" title="{{desc_or_name this}}">
   </li>
{{/each}}
</ul>


这是生成图标的网站/js 代码:

<script id="table-icons" type="text/x-handlebars-template">
  <ul id="icons">
    {{#each icons}}
       <li data-handle="{{handle}}">
         <img src="{{image_path}}" alt="{{desc_or_name this}}" title="{{desc_or_name this}}">
       </li>
    {{/each}}
  </ul>
</script>

这是页面上的结果:

<ul id="icons">
    <li data-handle="558FSTBI" class="">
        <img src="http://testsite.com/icons/558FSTBI.1.png" alt="Icon 1" title="Icon 1">
    </li>
    <li data-handle="310AYTZI">
        <img src="http://testsite.com/icons/310AYTZI.1.png" alt="Icon 2" title="Icon 2">
    </li>
    <li data-handle="669PQXBI" class="">
        <img src="http://testsite.com/icons/669PQXBI.1.png" alt="Icon 3" title="Icon 3">
    </li>
</ul>



我的目标:
我想做的是检索所有 li 数据句柄,但我无法弄清楚如何检索这些数据。所以我的目标是检索所有图标路径及其标题,有人可以帮我吗?我真的很感激任何帮助:)

【问题讨论】:

  • //script 不是呈现的 HTML 的一部分。你为什么要解析模板代码?
  • 好吧,因为我是个菜鸟 :P 我觉得脚本的结果给了我我真正想要的 ul/li 句柄,这样做是合乎逻辑的。我的意思是,渲染的 HTML 是从脚本生成的,对吧?我还能如何获取链接?
  • 无法从 python 请求中获取模板代码。另外,如果它是在页面加载后呈现的,那么你会得到一个空列表,并且无论如何你都不能使用 requests 。 stackoverflow.com/questions/13960567/…

标签: python web python-requests screen-scraping


【解决方案1】:

您没有解析 liul

从这里开始

//ul[@id='icons']/li/img

从这些元素中,您可以提取个人信息

关于第一个问题,beautifulsoup 可以选择使用 lxml。如果您认为不需要它,并且对 XPath 感到满意,请不要担心。

但是,由于它是 Javascript 生成页面,因此您需要一个无头浏览器而不是请求库。

Get page generated with Javascript in Python

Reading dynamically generated web pages using python

【讨论】:

  • 这很奇怪,如果我尝试返回一个空列表。看起来无法获取链接的内容:/ 我该如何调试呢?
  • 我使用了一个在线XPath工具,关闭&lt;/img&gt;后它运行良好
  • 感谢您的帮助。太糟糕了,无需模拟浏览器就无法获得 JS 生成的页面:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-28
相关资源
最近更新 更多