wikipediaで情報をスクレイピングをしデータベースに保存しようとしております。
ですが、以下のエラーが出ております。
この解決方法をご教示頂けますと幸いです。
####詳細
なんの構文エラーが出ているのかもわからない状態です。
こちらは、本で学習したものを応用したものでコードの解説が特になくコードの中で無意味だと考えたものは全て端折りました。
調べようとしたのですがrecordsとsqliteを組み合わせたデータベースの操作方法に関して検索してもあまり出てこないため困っている所です。
python3
1 2import requests 3from bs4 import BeautifulSoup 4import re 5import records 6from sqlalchemy.exc import IntegrityError 7 8 9url = "https://ja.wikipedia.org/wiki/%E6%98%A0%E7%94%BB%E4%BD%9C%E5%93%81%E4%B8%80%E8%A6%A7" 10r = requests.get(url) 11html_soup = BeautifulSoup(r.text,"html.parser") 12db = records.Database('sqlite:///database/movies.db') 13for base in html_soup.find("ul").find_all("li"): 14 db.query('''CREATE TABLE IF NOT EXISTS url( 15 url text PRIMARY KEY, 16 visited_at datetime NULL)''') 17 18#タイトルのスクレイピング 19def scrape_movies_title(): 20 for title in base.find_all("a"): 21 movies_title = title.get_text(strip=True) 22 print(movies_title) 23 24#リンクをスクレイピング 25def scrape_movies_links(): 26 for links in base.find_all("a"): 27 links.get("href") 28 print(links) 29 30def s(url): 31 db.query('''INSERT INTO url (url,created_at) 32 VALUES (:url,CURRENT_TIMESTAMP)''',url=url) 33s(scrape_movies_links) 34 35#データベース上でのスクレイピングデータの取扱 36def get_random_unvisited_link(): 37 db.query('''SELECT * FROM url 38 WHERE visited_at IS NULL 39 ORDER BY RANDOM() LIMIT 1''').first() 40 return None if scrape_movies_links() is None else scrape_movies_links() 41 42#データがない場合を想定したコード 43url_to_visit = get_random_unvisited_link() 44while url_to_visit is not None: 45 print("Now scraping:",url_to_visit) 46 new_links = scrape_movies_links() 47 t = 1 48 t += 1 49 print(t,"new_links_found")
回答2件
あなたの回答
tips
プレビュー