首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >尝试从网页中提取一些数据(抓取初学者)

尝试从网页中提取一些数据(抓取初学者)
EN

Stack Overflow用户
提问于 2019-02-21 02:04:53
回答 1查看 102关注 0票数 1

我正在尝试使用请求、Beautifulsoup.从网页中提取一些数据我首先获取带有请求的html代码,然后将其“放入”Beautifulsoup中:

from bs4 import BeautifulSoup
import requests


result = requests.get("https://XXXXX")
#print(result.status_code)
#print(result.headers)
src = result.content
soup = BeautifulSoup(src, 'lxml')

然后我挑出了一些代码:

tags = soup.findAll('ol',{'class':'activity-popup-users'})

print(tags)

这是我得到的一部分:

<div class="account js-actionable-user js-profile-popup-actionable " data-emojified-name="" data-feedback-token="" data-impression-id="" data-name="The UN Times" data-screen-name="TheUNTimes" data-user-id="3787869561">

我现在想要的是提取data-user-id=之后的数据,它由""之间的数字组成。然后我希望将这些数据输入到某种计算表中。我是一个绝对的初学者,我正在粘贴我在教程或文档中找到的代码。非常感谢你抽出时间来。

编辑:所以这是我尝试过的:

from bs4 import BeautifulSoup
import requests
result = requests.get("https://XXXX")
src = result.content
soup = BeautifulSoup(src, 'html.parser')
tags = soup.findAll('ol',{'class':'activity-popup-users'})
print(tags['data-user-id'])

下面是我得到的信息:

TypeError: list indices must be integers or slices, not str

所以我试了一下:

from bs4 import BeautifulSoup 
import requests 
result = requests.get("https://XXXX") 
src = result.content soup = BeautifulSoup(src, 'html.parser')
#tags = soup.findAll('a',{'class':'account-group js-user-profile-link'}) 
tags = soup.findAll('ol',{'class':'activity-popup-users'}) 
tags.attrs
#print(tags['data-user-id'])

并得到了:

File "C:\Users\XXXX\element.py", line 1884, in __getattr__
    "ResultSet object has no attribute '%s'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?" % key

AttributeError: ResultSet object has no attribute 'attrs'. You're probably treating a list of items like a single item. Did you call find_all() when you meant to call find()?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-21 02:09:49

您可以通过将标记视为属性-值字典来获取标记的任何属性值。

Read the BeautifulSoup documentation on attributes.

tag['data-user-id']

例如

html="""
<div class="account js-actionable-user js-profile-popup-actionable " data-emojified-name="" data-feedback-token="" data-impression-id="" data-name="The UN Times" data-screen-name="TheUNTimes" data-user-id="3787869561">
"""
from bs4 import BeautifulSoup
soup=BeautifulSoup(html,'html.parser')
tag=soup.find('div')
print(tag['data-user-id'])

输出

3787869561

编辑以包括OP的问题更改:

from bs4 import BeautifulSoup
import requests
result = requests.get("http://twitter.com/RussiaUN/media")
src = result.content
soup = BeautifulSoup(src, 'html.parser')
divs = soup.find_all('div',class_='account')
#just print
for div in divs:
    print(div['data-user-id'])
#write to a file    
with open('file.txt','w') as f:
   for div in divs:
        f.write(div['data-user-id']+'\n')

输出:

255471924
2154112404
408696260
1267887043
475954041
3787869561
796979978
261711504
398068796
1174451010
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54792663

复制
相关文章

相似问题

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