簡體   English   中英

使用正則表達式提取數據並將其插入.csv文件

[英]Pull data using regex and insert into a .csv file

所以我正在使用正則表達式從網頁中提取數據。 做完了

現在,我正在嘗試將此數據插入.csv文件。 沒問題吧?

因此,我無法從我創建的要插入.csv文件的循環中提取數據。 似乎最好的解決方法是創建一個列表,然后以某種方式將數據插入列表中並將數據寫入csv文件。 但是如何使用當前設置進行操作?

import re
import sqlite3 as lite
import mysql.connector
import urllib.request
from bs4 import BeautifulSoup
import csv

#We're pulling info on socks from e-commerce site Aliexpress

url="https://www.aliexpress.com/premium/socks.html?SearchText=socks&ltype=wholesale&d=y&tc=ppc&blanktest=0&initiative_id=SB_20171202125044&origin=y&catId=0&isViewCP=y"

req = urllib.request.urlopen(url)
soup = BeautifulSoup(req, "html.parser")
div = soup.find_all("div", attrs={"class":"item"})

for item in div:
    title_pattern = '<img alt="(.*?)\"'
    comp = re.compile(title_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        print(x)

    price_pattern = 'itemprop="price">(.*?)<'
    comp = re.compile(price_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        print(x)

    seller_pattern = '<a class="store j-p4plog".*?>(.*?)<'
    comp = re.compile(seller_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        print(x)

    orders_pattern = '<em title="Total Orders">.*?<'
    comp = re.compile(orders_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        print(x[32:-1])

    feedback_pattern = '<a class="rate-num j-p4plog".*?>(.*)<'
    comp = re.compile(feedback_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        print(x)

# Creation and insertion of CSV file

# csvfile = "aliexpress.csv"
# csv = open(csvfile, "w")
# columnTitleRow = "Title,Price,Seller,Orders,Feedback,Pair"
# csv.write(columnTitleRow)
#
# for stuff in div:
#     title = 
#     price = 
#     seller = 
#     orders = 
#     feedback = 
#     row = title + "," + price + "," + seller + "," + orders + "," + feedback + 
"," + "\n"
#     csv.write(row)

我希望能夠按它們的行打印這些列表。

似乎最好的解決方法是創建一個列表,然后以某種方式將數據插入列表中並將數據寫入csv文件。 但是如何使用當前設置進行操作?

你是對的。 將您的print語句替換為append s到列表:

data = []
for item in div:
    title_pattern = '<img alt="(.*?)\"'
    comp = re.compile(title_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        data.append(x)

    price_pattern = 'itemprop="price">(.*?)<'
    comp = re.compile(price_pattern)
    href = re.findall(comp, str(item))
    for x in href:
        data.append(x)

然后再

csv.writerow(data)

從我記得的情況來看,csv.write始終使用一個列表,而不是呈現的CSV字符串。 這就是重點,它獲取原始數據並正確地對其進行轉義並為您添加逗號。

編輯:如評論中所述,我記錯了csv writer的接口。 writerow需要一個列表,而不是write 更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM