繁体   English   中英

如何在Python中查找字符串并将其返回到stdout

[英]How to find string and return it to stdout in Python

我已经熟悉Python,并且正在努力使用BeautifulSoup,Python进行以下操作。

预期结果:

*如果以下脚本的输出包含字符串5378 ,则应通过电子邮件将出现字符串的行发送给我。

#! /usr/bin/env python

from bs4 import BeautifulSoup
from lxml import html
import urllib2,re

import codecs
import sys
streamWriter = codecs.lookup('utf-8')[-1]
sys.stdout = streamWriter(sys.stdout)

BASE_URL = "http://outlet.us.dell.com/ARBOnlineSales/Online/InventorySearch.aspx?c=us&cs=22&l=en&s=dfh&brandid=2201&fid=111162"

webpage = urllib2.urlopen(BASE_URL)
soup = BeautifulSoup(webpage.read(), "lxml")
findcolumn = soup.find("div", {"id": "itemheader-FN"})
name = findcolumn.text.strip()
print name

我尝试使用findall(5378, name) ,但是它返回到这样的空括号[]

  • 如果我尝试将其与grep一起使用,则我会遇到Unicode问题。

$ python dell.py | grep 5378 Traceback (most recent call last): File "dell.py", line 18, in <module> print name UnicodeEncodeError: 'ascii' codec can't encode character u'\”' in position 817: ordinal not in range(128)

有人可以告诉我在这两种情况下我做错了什么吗?

函数findall (来自re模块)期望第一个参数是一个正则表达式,它是一个字符串,但是您提供了一个整数。 尝试以下方法:

re.findall("5378", name)

当打印这将输出[u'5378']的时候才发现的东西或[]当它没有。

我怀疑您想从编号中检索产品名称,这意味着您必须遍历findcolumn元素。 我们可以在此处使用re.search()来检查元素文本中是否存在单个匹配项。

for input_element in findcolumn.find_all("div"):
    name = unicode(input_element.text.strip())
    if re.search("5378", name) != None:
        print unicode(name)

至于unicode错误,有很多解决方案,具体取决于您的操作系统和配置: 在Ubuntu上重新配置系统区域设置使用.encode() / unicode()对脚本输出进行编码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM