在Beautiful Soup刮片中使用正则表达式

时间:2015-05-19 23:15:13

标签: python regex beautifulsoup

我有一个网址列表,我尝试使用正则表达式从每个网址中删除信息。这是我的代码(好吧,至少是相关部分):

for url in sammy_urls:
    soup = BeautifulSoup(urlopen(url).read()).find("div",{"id":"page"})
    addy = soup.find("p","addy").em.encode_contents()
    extracted_entities = re.match(r'"\$(\d+)\. ([^,]+), ([\d-]+)', addy).groups()
    price = extracted_entities[0]
    location = extracted_entities[1]
    phone = extracted_entities[2]
    if soup.find("p","addy").em.a:
        website = soup.find("p", "addy").em.a.encode_contents()
    else:
        website = ""

当我提取几个网址并练习正则表达式时,提取的实体和价格位置手机网站都很好,但是当我把它放到这个更大的循环中时会遇到麻烦,正在提供真实的URL。

我输错了正则表达式吗? (错误消息是''无类型'对象没有属性'群组''这是我猜的。)

我的加入'似乎是我想要的......(打印

"$10. 2109 W. Chicago Ave., 773-772-0406, "'<a href="http://www.theoldoaktap.com/">theoldoaktap.com</a>

"$9. 3619 North Ave., 773-772-8435, "'<a href="http://www.cemitaspuebla.com/">cemitaspuebla.com</a>

等等。)

1 个答案:

答案 0 :(得分:0)

将html / xml与正则表达式结合起来会变坏。

为什么不使用bs4在你感兴趣的div中找到'a'元素,并从元素中获取'href'属性。

另见retrieve links from web page using python and BeautifulSoup