2017-04-06 23 views
0

私は、当社が作成したウェブサイトからコンテンツを抽出しようとしています。私はMSSQL ServerにScrapyデータ用のテーブルを作成しました。また、Scrapyを設定し、Pythonが&のWebページデータを抽出するように設定しました。私の質問は、ScrapyでクロールされたデータをローカルのMSSQL Serverデータベースにエクスポートするにはどうすればいいですか?Scrapy - Microsoft SQL ServerデータベースにWebサイトとストアデータをクロールする方法

これは、データを抽出するためのScrapyのコードです:

import scrapy 

class QuotesSpider(scrapy.Spider): 
    name = "quotes" 
    start_urls = [ 
     'http://quotes.toscrape.com/page/1/', 
     'http://quotes.toscrape.com/page/2/', 
    ] 

    def parse(self, response): 
     for quote in response.css('div.quote'): 
      yield { 
       'text': quote.css('span.text::text').extract_first(), 
       'author': quote.css('small.author::text').extract_first(), 
       'tags': quote.css('div.tags a.tag::text').extract(), 
      } 

答えて

1

あなたはこのような何か、SQL Serverにデータを送信するためにpymssqlモジュールを使用することができます。

import pymssql 

class DataPipeline(object): 
    def __init__(self): 
     self.conn = pymssql.connect(host='host', user='user', password='passwd', database='db') 
     self.cursor = self.conn.cursor() 

    def process_item(self, item, spider): 
     try: 
      self.cursor.execute("INSERT INTO MYTABLE(text, author, tags) VALUES (%s, %s, %s)", (item['text'], item['author'], item['tags'])) 
      self.conn.commit() 
     except pymssql.Error, e: 
      print ("error") 

     return item 

また、あなたが'spider_name.pipelines.DataPipeline' : 300を追加する必要があります〜ITEM_PIPELINESに設定してください。

0

データをCSVに保存してから、SQL ServerテーブルにCSVを読み込むことをお勧めします。

import csv 
import requests 
import bs4 

res = requests.get('http://www.ebay.com/sch/i.html?LH_Complete=1&LH_Sold=1&_from=R40&_sacat=0&_nkw=gerald%20ford%20autograph&rt=nc&LH_Auction=1&_trksid=p2045573.m1684') 
res.raise_for_status() 
soup = bs4.BeautifulSoup(res.text) 

# grab all the links and store its href destinations in a list 
links = [e['href'] for e in soup.find_all(class_="vip")] 

# grab all the bid spans and split its contents in order to get the number only 
bids = [e.span.contents[0].split(' ')[0] for e in soup.find_all("li", "lvformat")] 

# grab all the prices and store those in a list 
prices = [e.contents[0] for e in soup.find_all("span", "bold bidsold")] 

# zip each entry out of the lists we generated before in order to combine the entries 
# belonging to each other and write the zipped elements to a list 
l = [e for e in zip(links, prices, bids)] 

# write each entry of the rowlist `l` to the csv output file 
with open('ebay.csv', 'w') as csvfile: 
    w = csv.writer(csvfile) 
    for e in l: 
     w.writerow(e) 

OR

import requests, bs4 
import numpy as np 
import requests 
import pandas as pd 

res = requests.get('http://www.ebay.com/sch/i.html? LH_Complete=1&LH_Sold=1&_from=R40&_sacat=0&_nkw=gerald%20ford%20autograph&r  t=nc&LH_Auction=1&_trksid=p2045573.m1684') 
res.raise_for_status() 
soup=bs4.BeautifulSoup(res.text, "lxml") 

# grabs the link, selling price, and # of bids from historical auctions 
df = pd.DataFrame() 


l = [] 
p = [] 
b = [] 


for links in soup.find_all(class_="vip"): 
    l.append(links) 

for bids in soup.find_all("li", "lvformat"): 
    b.append(bids) 

for prices in soup.find_all("span", "bold bidsold"): 
    p.append(prices) 

x = np.array((l,b,p)) 
z = x.transpose() 
df = pd.DataFrame(z) 
df.to_csv('/Users/toasteez/ebay.csv') 
関連する問題