Python Regex不匹配所有字符串

时间:2016-01-14 11:27:03

标签: python regex beautifulsoup lxml

所以我试图使用Python和regex匹配亚马逊项目页面中的货币字符串。

我目前的代码:

$this->db->select("product_name")
    ->from('sale_items')
    ->where('sale_items.sale_id',4221);
    $q1 = $this->db->get();
    if ($q1->num_rows() > 0) {
     foreach (($q1->result_array()) as $row1) {
    $prdtarray[] = $row1['product_name'];
    }
    $product=implode(',',$prdtarray); 
    echo $product ;

当前打印出first url

import csv
import requests as rq
import re
import lxml
from bs4 import BeautifulSoup as bs

i = 0
urls = csv.reader(open('/Users/Fuck/Documents/Amazon/HTML_Parsetest/urls.csv'))
for url in urls:
    r=rq.get(url[0],stream=True)
    for chunk in r.iter_content(chunk_size=2048):
        if chunk:
            data = chunk
            soup=bs(data, "lxml")
            elem=soup.find_all('td',attrs={'class':'a-text-right dp-used-col'})
            print(elem)
            if elem!=[]:
                i = i + 1
                s=re.findall('(\£\d+\.\d+)+',str(elem[0]))
                print (i,"Price:", s[0].split()[0])

second url打印出来:

[<td class="a-text-right dp-used-col">
<a class="a-link-normal" href="/gp/offer-listing/019859660X/ref=tmm_hrd_used_olp_0?ie=UTF8&amp;condition=used&amp;qid=&amp;sr=">
<span>£51.70</span>
</a>
</td>]
1 Price: £51.70
[<td class="a-text-right dp-used-col">
<a class="a-link-normal" href="/gp/offer-listing/0198596790/ref=tmm_pap_used_olp_sr?ie=UTF8&amp;condition=used&amp;qid=&amp;sr=">
<span>£35.15</span>
</a>
</td>]
2 Price: £35.15

在第二个url运行中,它将整个td块视为一个实体,而在第一个中它将它们作为单独的块找到,我无法解决原因。 所以看起来我的正则表达式只会在每个块中找到一个字符串实例。

如何在第二个网址中找到这些字符串£355.37和£29.93?

2 个答案:

答案 0 :(得分:0)

首先,你不应该在这里使用iter_content(),因为这意味着你要解析部分HTML而不是整个文档。 BeautifulSoup可能会设法提取一些东西,但是如果不知道的话,你会遗漏很多内容。

除此之外,您在搜索时已经使用soup.findall()re.finall(),但您只是查看每个匹配项的第一场比赛。迭代这两个结果,你应该看到所有的结果。

当然,可能还有很多其他问题。例如,价格可能根本不是用HTML编写的,或者不是以您正在搜索的格式编写的,或者在您搜索的标签中找不到...

祝你好运!

答案 1 :(得分:0)

s=re.findall('(\£\d+\.\d+)+',str(elem[0]))

这将返回一个您可以迭代的字符串列表,以便s[1]具有第二个价格。

我不认为解析原始html是提取这些价格的好主意,亚马逊可能会决定随时更改html / css / js并且代码会中断。你应该看看他们的网络服务:

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/EX_RetrievingPriceInformation.html