如何使用python从网站中提取价值?

时间:2017-05-14 02:44:46

标签: python web-scraping

我正在研究价格网络抓取代码,以提取价格,数量等数据。我使用BeautifulSoup的代码从目标网站的html标签中提取文本。 但是,它返回了一堆文本,我不知道在将它们打印到csv文件之前如何拆分或分离它们。

from urllib import urlopen as uReq
from bs4 import BeautifulSoup as soup

my_url = 'https://www.digikey.com/products/en?keywords=568-3651-5-ND'
uClient = uReq(my_url)
page_html = uClient.read()
uClient.close()
page_soup = soup(page_html, "html.parser")
containers = page_soup.body.script
filename = "products.txt"
f = open(filename, "w")
headers = "data"
f.write(headers)
data = containers.text
f.write(data + "\n")
f.close()

然后返回:

var utag_data = {
            page_site: 'US',
            page_language: 'en',
            wt_use_udo: 'True',
            page_content_group: 'Part Search',
            page_content_sub_group: 'Part Detail',
            page_title: 'Part Detail',
            page_type: 'PS',
            page_sub_type: 'PD',
            page_id: 'PD',
            **pn_sku: '1740-1017-ND',**
            part_id: '1154763',
            **part_available: '4324',**
            transaction_type: 'v',
            transaction_quantity: '1',
            supplier_id: '1740'
                , part_search_filter: 'No Filter'
                , **part_search_term: '568-3651-5-ND'**
                , part_search_term_ext: '568-3651-5-ND'
                    , part_search_results_count: 1
            , video_source: 'Part Detail'
        }

我尝试使用find和regex,但结果并不像我预期的数量(part_available:'4324')和sku_num(pn_sku:'1740-1017-ND')。我是python和编码的新手,请留下任何评论。

1 个答案:

答案 0 :(得分:0)

不要试图使用正则表达式,而是最好使用json。但是给定的脚本不是严格格式化的json。相反,您可以使用http://imgur.com/tWgCDWD

import yaml
data = yaml.load(containers.text.replace('var utag_data =', '', 1))
with open('products.csv', 'w') as f:
    f.write('part,sku\n')
    f.write('{},{}\n'.format(data['part_available'], data['pn_sku']))

结果csv文件内容:

part,sku
4324,1740-1017-ND