python,从页面收集链接/脚本值

时间:2013-12-03 20:20:50

标签: python selenium web-scraping mechanize python-requests

我正在尝试制作一个程序来收集网站上的链接和一些值。它工作得很好,但我遇到了一个不起作用的页面。

使用firebug,我可以看到这是虚幻的“链接”的html代码(在查看源代码时无法找到它):

<a class="visit" href="/tet?id=12&mv=13&san=221">

    221

</a>

这是脚本:

<td><a href=\"/tet?id=12&mv=13&san=221\" class=\"visit\">221<\/a><\/td><\/tr>

我想知道如何从html代码获取“link”(“/ tet?id = 12&amp; mv = 13&amp; san = 221”),从脚本或html获取字符串“221”使用selenium,机械化或请求(或其他一些库)

我使用br.links()函数尝试使用mechanize进行了一次尝试失败,该函数从侧面收集了许多链接,而不是我之后的那些链接

额外信息:这可能很重要。要访问该页面,我必须使用以下代码单击按钮:

<a id="f33" class="button-flat small selected-no" onclick="qc.pA('visitform', 'f33', 'QClickEvent', '', 'f52'); if ($j('#f44').length == 0) { $j('f44').style.display='inline'; }; $j('#f38').hide();qc.recordControlModification('f38', 'DisplayStyle', 'hide'); document.getElementById('forumpanel').className = 'section-3'; return false;" href="#">

    load2

</a>

之后,“新页面”会加载到窗口的一部分中(但网址永远不会更改)

1 个答案:

答案 0 :(得分:1)

我认为你粘贴了错误的剧本;)

我不确定你到底需要什么 - 至少有两种不同的方法。

  • 使用正则表达式匹配所有href
  • 匹配特定标签并使用getAttribute(...)

对于第一个,你必须得到页面的整个html源代码,如webdriver.page_source,并使用类似下面的正则表达式(你将不得不逃避正常或双引号!):

<a.+?href=['"](.*?)['"].*?/?>

如果您需要所有匹配链接的href,可以使用与webdriver.find_elements_by_css_selector('.visit')类似的内容(注意选择find_elements_...而不是find_element_...!)以获取webelements列表和迭代它们以获得它们的属性。

这可能导致代码如下:

hrefs = []
elements = webdriver.find_elements_by_css_selector('.visit')

for element in elements:
    hrefs.append(element.getAttribute('href'))

或使用列表理解的单行:

hrefs = [element.getAttribute('href') for element \
         in webdriver.find_elements_by_css_selector('.visit')]