Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Beautifulsoup和Mechanize解析元素中的href属性值_Python_Django_Parsing_Html Parsing_Beautifulsoup - Fatal编程技术网

Python 使用Beautifulsoup和Mechanize解析元素中的href属性值

Python 使用Beautifulsoup和Mechanize解析元素中的href属性值,python,django,parsing,html-parsing,beautifulsoup,Python,Django,Parsing,Html Parsing,Beautifulsoup,有人能帮我用漂亮的汤遍历html树吗 我试图通过html输出进行解析,收集每个值后,用python/django将其插入名为Tld的表中 <div class="rc" data-hveid="53"> <h3 class="r"> <a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m

有人能帮我用漂亮的汤遍历html树吗

我试图通过html输出进行解析,收集每个值后,用python/django将其插入名为
Tld
的表中

<div class="rc" data-hveid="53">
<h3 class="r">
<a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m3fly0i1VLOK9NJkV55hAQ','0CDYQFjAB','','',event)">Billing: Portal Home</a>
</h3>
其中:

问题是上面的
find\u all
,距离
元素还不够远

非常感谢您的帮助。 多谢各位

from bs4 import BeautifulSoup

html = """
<div class="rc" data-hveid="53">
<h3 class="r">
<a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m3fly0i1VLOK9NJkV55hAQ','0CDYQFjAB','','',event)">Billing: Portal Home</a>
</h3>
"""

bs = BeautifulSoup(html)
elms = bs.select("h3.r a")
for i in elms:
    print(i.attrs["href"])
h3.ra
是一个

您可以使用css选择器(我更喜欢)、xpath或find-in元素。选择器
h3.ra
将查找类
r
的所有
h3
,并从它们内部获取
a
元素。它可能是一个更复杂的例子,比如
#an_id table tr.the_tr_class td.the_td_class
,它会找到一个给定td的id,它属于给定类的tr,当然也在一个表中

这也会给你同样的结果
find_all
返回一个列表,其中包含
bs4.element.Tag
find_all
有一个递归字段,不确定是否可以在一行中完成,我个人更喜欢css选择器,因为它简单且干净

for elm in  bs.find_all('h3',attrs={'class': 'r'}):
    for a_elm in elm.find_all("a"):
        print(a_elm.attrs["href"])

除了打印,是否可以将“tld”插入django表?@CodeTalk我对django一无所知:(感谢您告诉我该怎么做。有一个问题-BeautifulSoup是否在整个过程中或多或少使用CSS选择器来选择元素和子元素?抱歉,我没有提到您也可以使用find_all或xpath来完成此操作,但我发现CSS选择器是最简单、最干净的方法。是的,在这种情况下,它可以获得所有子元素
a
,我会重新考虑。)我告诉你css选择器,当我开始解析时,我使用的是regex,然后我开始使用find方法。当我发现我可以使用css选择器时,我的生活变得轻松多了。第一次看起来有点吓人,但只是语法和习惯而已
for url in urls:
    mb.open(url)
    beautifulSoupObj = BeautifulSoup(mb.response().read())
    beautifulSoupObj.find_all('h3',attrs={'class': 'r'})
from bs4 import BeautifulSoup

html = """
<div class="rc" data-hveid="53">
<h3 class="r">
<a href="https://billing.anapp.com/" onmousedown="return rwt(this,'','','','2','AFQjCNGqpb38ftdxRdYvKwOsUv5EOJAlpQ','m3fly0i1VLOK9NJkV55hAQ','0CDYQFjAB','','',event)">Billing: Portal Home</a>
</h3>
"""

bs = BeautifulSoup(html)
elms = bs.select("h3.r a")
for i in elms:
    print(i.attrs["href"])
https://billing.anapp.com/
for elm in  bs.find_all('h3',attrs={'class': 'r'}):
    for a_elm in elm.find_all("a"):
        print(a_elm.attrs["href"])