Scraperwiki + lxml。如何获取具有类的元素的子元素的 href 属性?

Posted

技术标签:

【中文标题】Scraperwiki + lxml。如何获取具有类的元素的子元素的 href 属性?【英文标题】:Scraperwiki + lxml. How to get the href attribute of a child of an element with a class? 【发布时间】:2012-12-16 16:11:57 【问题描述】:

在 URL 中包含“alpha”的链接上有许多链接(hrefs),我想从 20 个不同的页面收集这些链接并粘贴到一般 url 的末尾(倒数第二行)。 href 可以在一个表中找到,哪个类是 mys-elastic mys-left 对于 td 和 a 显然是包含 href 属性的元素。任何帮助将不胜感激,因为我已经为此工作了大约一周。

for i in range(1, 11):
# The html Scraper for the 20 pages that list all the exhibitors
 url = 'http://ahr13.mapyourshow.com/5_0/exhibitor_results.cfm?alpha=%40&type=alpha&page='         + str(i) + '#GotoResults'
print url
list_html = scraperwiki.scrape(url)
root = lxml.html.fromstring(list_html)
href_element = root.cssselect('td.mys-elastic mys-left a')

for element in href_element:
#   Convert HTMl to lxml Object 
 href = href_element.get('href')
 print href

 page_html = scraperwiki.scrape('http://ahr13.mapyourshow.com' + href)
 print page_html

【问题讨论】:

到底是什么问题? 你对XPath有多熟悉? rds:问题是它没有获取 href 属性并将其保存为变量以供以后添加到基本 url。 Jon Clements:我才真正了解它,直到我刚刚搜索它,这个词很有帮助,谢谢。 【参考方案1】:

无需为 javascript 搞砸 - 一切都在 html 中:

import scraperwiki
import lxml.html

html = scraperwiki.scrape('http://ahr13.mapyourshow.com/5_0/exhibitor_results.cfm?  alpha=%40&type=alpha&page=1')

root = lxml.html.fromstring(html)
# get the links
hrefs = root.xpath('//td[@class="mys-elastic mys-left"]/a')

for href in hrefs:
   print 'http://ahr13.mapyourshow.com' + href.attrib['href'] 

【讨论】:

谢谢,正是我所需要的。一个简单的问题,我将如何使用 scraperwiki 为我们刚刚抓取的所有 URL 执行 XPath 或 csselect? 本质上:使用attrib得到hrefroot.xpath('//td[@class="mys-elastic mys-left"]/a').attrib['href']【参考方案2】:
import lxml.html as lh
from itertools import chain

URL = 'http://ahr13.mapyourshow.com/5_0/exhibitor_results.cfm?alpha=%40&type=alpha&page='
BASE = 'http://ahr13.mapyourshow.com'
path = '//table[2]//td[@class="mys-elastic mys-left"]//@href'

results = []   
for i in range(1,21):     
    doc=lh.parse(URL+str(i)) 
    results.append(BASE+i for i in doc.xpath(path))

print list(chain(*results))

【讨论】:

selenium 在 Windows 上设置起来非常困难和麻烦。 scraperwiki.com 是否有替代方案或具体方法? (我收到 ChromeDriver 错误) @PatrickArtounian -- 很抱歉最初的错误,我看的时候很着急。更正了我的答案,现在应该没问题。请注意,xpath 从表中获取常规链接和粗体链接。

以上是关于Scraperwiki + lxml。如何获取具有类的元素的子元素的 href 属性?的主要内容,如果未能解决你的问题,请参考以下文章

text scraperwiki数据

python,lxml以及如何从子集中获取html代码

如何使用 BS4 和 LXML 获取 xpath

lxml - 获取元素的平面列表

Python爬虫解析htm时lxml的HtmlElement对象获取和设置inner html方法

安装 lxml 后“bs4.FeatureNotFound:找不到具有您请求的功能的树生成器:lxml”