首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用BeautifulSoup按id选择html

问使用BeautifulSoup按id选择html
EN

Stack Overflow用户
提问于 2017-11-28 20:58:28
回答 1查看 7.6K关注 0票数 0

我正在尝试从网页中选择html的一个部分

我使用代码:

代码语言:javascript
复制
import urllib.request, urllib.parse, urllib.error
from lxml import html
from bs4 import BeautifulSoup

html = urllib.request.urlopen("http://archiveofourown.org/works/1758087?view_full_work=true").read()
soup = BeautifulSoup(html, 'lxml')

for tag in soup.find_all(id="children"):
    print(tag.get('href'))

为了得到这个:

代码语言:javascript
复制
<div id="children" class="children module">
  <h3 class="heading">Works inspired by this one:</h3>
  <ul>
    <li>
        <a href="/works/2219289">not an origin story</a> by <a rel="author" href="/users/eiirene/pseuds/eiirene">eiirene</a>
    </li>
  </ul>
</div>

然后提取数字(2219289)和名称(eiirene)。

当我在url = "work=true“上运行相同的代码尝试选择以下内容时:

代码语言:javascript
复制
<div id="children" class="children module">
  <h3 class="heading">Works inspired by this one:</h3>
  <ul>
    <li>
        <a href="/works/240745">Cover-  Performance in A Leading Role by mad_lori</a> by <a rel="author" href="/users/blanketforyourshock/pseuds/blanketforyourshock">blanketforyourshock</a>
    </li>
    <li>
        <a href="/works/341326">Movie still: To A Stranger</a> by <a rel="author" href="/users/RedOrchid/pseuds/RedOrchid">RedOrchid</a>
    </li>
    <li>
        <a href="/works/787850">Future Yesterday</a> by <a rel="author" href="/users/ladymac111/pseuds/ladymac111">ladymac111</a>
    </li>
  </ul>
</div>

它返回“无”。如果我使用find_all,它将返回一个空列表[]。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-28 21:56:20

我将两个urls都包含在一个列表中,并将它们循环起来。此外,为了简单起见,我使用了请求库。

代码:

代码语言:javascript
复制
import requests, re
from bs4 import BeautifulSoup

urls = ["http://archiveofourown.org/works/1758087?view_full_work=true", "http://archiveofourown.org/works/225563?view_full_work=true"]
for url in urls:
    print("***********************")
    html = requests.get(url).text
    soup = BeautifulSoup(html, 'html.parser')
    part = soup.find("div", id="children")
    soup = BeautifulSoup(str(part), 'html.parser')
    nums = soup.findAll('a', href=re.compile('/works/'))
    names = soup.findAll('a', href=re.compile('/users/'))
    for i in range(0, len(nums)):
        print(str(nums[i]['href']).split('/works/')[1] + " : " + names[i].text)

输出:

代码语言:javascript
复制
***********************
2219289 : eiirene
***********************
240745 : blanketforyourshock
341326 : RedOrchid
787850 : ladymac111
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47540811

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档