我正在研究价格网络抓取代码,以提取价格,数量等数据。我使用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和编码的新手,请留下任何评论。
答案 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