0
クローラを実行するデータを取得するのがわかりましたが、データをcsvファイルに出力する際に、1行に出力します。私は非常にPythonのクラスで作業するので、私は仮定的に別の例を見て書いた私のコードに多くの間違いがあるかもしれません。ですから、この時点では、単一行の印刷を修正し、新しい行を作成するようにしたいと考えています。どんな提案も高く評価されます。私が正しくあなたを理解している場合はスクラップされたデータがcsvに1行で出力される
import csv
import requests
from lxml import html
class wiseowl:
def __init__(self,start_url):
self.start_url=start_url
self.storage=[]
def crawl(self):
self.get_link(self.start_url)
def get_link(self,link):
response=requests.get(link)
tree=html.fromstring(response.text)
titles=tree.xpath("//p[@class='woVideoListDefaultSeriesTitle']")
for title in titles:
name=title.xpath(".//a/text()")[0]
urls=title.xpath(".//a/@href")[0]
Docs=(name,urls)
self.storage.append(Docs)
def writing_csv(self):
with open("Wiseowl.csv","w",newline="") as f:
writer=csv.writer(f)
writer.writerow(["Title","Link"])
writer.writerow(self.storage)
def __str__(self):
return "{}".format(self.storage)
crawler=wiseowl("http://www.wiseowl.co.uk/videos/")
crawler.crawl()
crawler.writing_csv()
for item in crawler.storage:
print(item)
ありがとうNurzhan、そのような素晴らしいソリューションです。完璧に動作します。しばらくあなたの答えを受け入れるつもりです。もう一つ知っておくべきことは:self.nameとself.urlsを使ってget_linkメソッドから "dunstr"メソッドに "self.storage"を使用する代わりに "name"と "urls"を使用したいのですか? – SIM
@ SMth80、 '__str__'メソッドで' self.name'と 'self.urls'を使って変数' name'と 'urls'にアクセスしたい場合は、それらをコンストラクタメソッドでインスタンス変数として宣言する必要がありますあなたの 'wiseowlクラス'の '__init__'。たとえば、 'self.name =" "'と 'self.urls =" "'とします。しかし、名前とURLのペアのコレクションを扱うので、あなたの現在の解決策は問題ありません。名前とURLのペア(タプル)を 'storage'リストに入れ、そこからアクセスします。私はあなたの質問に答えました。 – Nurjan
ありがとうございます。あなたの答えは、私の年の労力を節約しました。 – SIM