Python 提取数据的漂亮汤

Python 提取数据的漂亮汤,python,beautifulsoup,Python,Beautifulsoup,我对python非常陌生。stackoverflow的长期用户,但第一次发布问题。 我正在尝试使用beautifulsoup从网站中提取数据。 可以在列表中提取,但我无法提取实际数据。 这里的目标是提取 列在:指甲油订阅框、美容产品订阅框、女性订阅框 加入标签:化妆品、美容、指甲油 你能告诉我怎么做吗 import requests from bs4 import BeautifulSoup l1=[] url='http://boxes.mysubscriptionaddiction.co

我对python非常陌生。stackoverflow的长期用户,但第一次发布问题。 我正在尝试使用beautifulsoup从网站中提取数据。

可以在列表中提取,但我无法提取实际数据。 这里的目标是提取 列在:指甲油订阅框、美容产品订阅框、女性订阅框 加入标签:化妆品、美容、指甲油

你能告诉我怎么做吗

import requests
from bs4 import BeautifulSoup

l1=[]
url='http://boxes.mysubscriptionaddiction.com/box/julep-maven'
source_code=requests.get(url)
plain_text=source_code.text
soup= BeautifulSoup(plain_text,"lxml")
for item in soup.find_all('p'):    
       l1.append(item.contents)
search='\nListed in:\n'
for a in l1:
    if a[0] in ('\nTagged in:\n','\nListed in:\n'):
        print(a)

既然您正在使用
lxml
,为什么不以更直接的方式使用它(
lxml
被认为比
BeautifulSoup
更快):

输出:

Listed in:
Nail Polish Subscription Boxes, Subscription Boxes for Beauty Products, Subscription Boxes for Women


Tagged in:
Makeup, Beauty, Nail polish
注意:该站点受验证码保护,因此您可能需要将源html作为字符串从浏览器的开发工具中复制,并在
tree=html.fromstring(copied_string)
中使用,以使此代码正常工作

soup = BeautifulSoup(plain_text, 'html.parser')

import re
context = soup(text=re.compile(r'Listed in:'))

for item in context:
    listed_in = item.parent
    tagged_in = listed_in.find_next_siblings()[0]

print(listed_in.text.strip('\n').replace('\n', ''))
print(tagged_in.text.strip('\n').replace('\n', ''))
将在一行中显示所有内容:

Listed in:Nail Polish Subscription Boxes, Subscription Boxes for Beauty Products, Subscription Boxes for Women, Tagged in: Makeup, Beauty, Nail polish

希望这能有所帮助。

谢谢山姆的回复。使用lxml的原因是python抛出了一个错误(BeautifulSoup(YOUR_MARKUP}))。我不熟悉lxml。这是另一个像beautifulsoup一样的包吗?@uraju是的,而且速度更快!能否提供有关错误的更多信息?Env35\lib\runpy.py。要消除此警告,请将如下代码更改为:beautifulsop(您的标记})为:beautifulsop(您的标记,“lxml”)MARKUP\u type=MARKUP\u type谢谢您的输入。您能帮助我如何在返回语句中调用它而不是打印(ele.text_content())吗。我希望返回语句中包含结果。返回'External function
import requests from lxml import html url='1'时出错http://boxes.mysubscriptionaddiction.com/box/julep-maven'source_code=requests.get(url)tree=html.fromstring(source_code.content)#解析html paras=tree.xpath('//div[@class=“box information”]/p'))#获取para元素#此循环打印所需para元素的文本。对于第[1:]段中的ele:a=[]a.append(ele.text_content())返回a
谢谢下载。我之前尝试过这种方法,但是列表[3:5]并不一致。有时我会在2:5或1:3中找到标记。Sams方法可以工作,但我无法创建列表的返回对象。我已将每个内容创建为函数,并在主程序中调用它们。我的最终目标是为每个产品创建一个所有项目的列表,如(描述、价格、评级、url、标记、列出),并将其导出到ExcelThank@uraju,感谢您的反馈。你的要求很容易理解。我已经更新了我的答案,但我不确定下一个解决方案是否比我之前的示例更具动态性。pastebin.com/Tw2ghzfK这是我的完整程序。我只想打印一行并将其导出到CSV@downshift。谢谢你的帮助。是的,我很高兴能帮助你。我在你的链接中运行了代码,似乎运行良好。什么工作不正常?我认为列出/标记的函数值显示在不同的行上,因为文本仍然包含
'\n'
换行符。移除它们应该可以修复它。尝试使用.text.strip('\n')中列出的
返回。替换('\n','')
,以及
返回.text.strip('\n')。替换('\n','')
Listed in:Nail Polish Subscription Boxes, Subscription Boxes for Beauty Products, Subscription Boxes for Women, Tagged in: Makeup, Beauty, Nail polish