0 8爬虫類は、データベースに格納されているクロールリンクやWikipediaのエントリbeautifulsoup4要求を学び、使用することを始めました
Pythonは、データベースに格納され、要求とbeautifulsoup4クロールリンクやWikipediaのエントリを使用しています
参照文献:
https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/
#インストールbeautifulsoup4
(pytools)D:\ pythonの\ pytools>ピップbeautifulsoup4をインストール
MySQLのモジュールをインストールします。
pymysqlアドレス:https://github.com/PyMySQL/PyMySQL
クロールWikipediaのエントリ
#のコード= UTF-8 から BS4 インポートBeautifulSoupの インポート要求が インポート再 DEF spider_wike(): URL = " https://en.wikipedia.org/wiki/Main_Page " ヘッダー = { " ユーザエージェント":" はMozilla / 5.0( Windows NTの10.0; Win64の、のx64)のAppleWebKit / 537.36(KHTML、ヤモリ等)クローム/ 75.0.3770.100サファリ/ 537.36 " } RESP = requests.get(URL、ヘッダー= ヘッダ) #将响应数据转换为UTF-8编码 RESP .encoding = ' UTF-8 ' html_doc = resp.text スープ = BeautifulSoup(html_docは、" html.parser " ) #は、href属性をウィキがわかっは、タグで始まる list_urls soup.find_all =(" A "、re.compileのHREF =(" / ^ /ウィキ" )) #の印刷(list_urls) #の名に対応するすべてのエントリとのURLの出力 のための URL でlist_urls: #1 フィルタアウトのURLの.JPGまたは.JPG最後 のIF ない re.search(R "\(JPG | JPG)"、URL [ " HREF " ]): #の項目を加えたURL #スティングは、GET_TEXTを取得することができます()の内容のラベルをすべて取得することができます 印刷(url.get_textを()、" <------> "、" HTTPS://en.wikipedia。 ORG " + URL [ " HREF " ]) IF __name__ == ' __main__ ' : spider_wike()
#データベースにWikipediaのエントリリンク
#のコーディング= UTF-8 から BS4の輸入BeautifulSoupの インポート要求が インポート再 インポートpymysql.cursors ''」 #环境准备 ピップpymysqlインストール データベースwikiurlのcharset = utf8mb4を作成します。 wikiurlを使用します。 テーブルのURL(ID int型主キーAUTO_INCREMENT、たURLNameのVARCHAR(255)、urlhrefのVARCHAR(1000))を作成します。 ''」 URL = " https://en.wikipedia.org/wiki/Main_Page " ヘッダ = { " のUser-Agent ":"Mozilla / 5.0(Windows NTの10.0; Win64の、x64-)のAppleWebKit / 537.36(ヤモリ様KHTML)クローム/ 75.0.3770.100サファリ/ 537.36 " } RESP = requests.get(URL、ヘッダー= ヘッダ) #は、UTFに応答データを変換-8コード resp.encoding = ' UTF-8 ' html_doc = resp.text スープ BeautifulSoup(html_doc = " html.parserを" ) #は、href属性がタグで始まるWikiへ見出さ soup.find_all =(list_urls " A "、 = re.compile HREF(" ^ /ウィキ/ " )) #印刷(list_urls) #の名前とURLに対応するすべてのエントリの出力 以下のための URL でlist_urls: #1 のURLの.JPGまたは.JPGエンドアウトフィルタ のIF ない re.search(R "\(JPG | JPG)"、URL [ " HREF " ]): #のエントリに加えURLの #のスティングのみすべての内容のラベルの取得)(、GET_TEXTを取得し 印刷を、url.get_text()(" <------> "、" https://en.wikipedia.org " + URL [ " HREF " ] ) 接続 = pymysql.connect(ホスト= ' ローカルホスト' 、 ユーザー = ' ルート' 、 パスワード = ' ルート' 、 DB = ' wikiurl ' 、 文字セット = ' utf8mb4 ' ) のtry : #は、ポインタを答える取得 カーソルとしてconnection.cursor(と): #はSQL文の作成 SQL = " INSERT INTO` URLを( `` urlname`、 `urlhref`)値(%のS、%のS)」 #SQL文の実行 cursor.execute(SQL、(url.get_text()、" https://en.wikipedia.org " + URL [ " HREF " ])) #提交数据 connection.commit() 最後に: connection.close()
#は、データベースのエントリから情報を読み取り、
#コーディング= UTF-8 インポートpymysql DEF get_conn(): 接続 = pymysql.connect(ホスト= ' はlocalhost ' 、 ユーザ = ' ルート' 、 パスワード = ' ルート' 、 DB = ' wikiurl ' 、 文字セット = ' utf8mb4 ' ) リターン接続 DEF get_wiki_data(): CONN =get_conn() SQL = " urlname`` SELECT、` urlhref`のURLから" CUR = conn.cursor() #は、取得したレコードの合計数 COUNT = cur.execute(SQL) を印刷(COUNT) #すべてのデータを取得 #urllists = CUR .fetchall() #指定された項目データ取得 #1 =(3)urllistsのcur.fetchmanyを #1 #urllistsにURL用: #1 印刷([1] URL [0]、 '<--->'、URLの) #は、データを取得します =リンクcur.fetchone() 印刷(リンク) #は、接続クローズ はconn.closeを() デフget_data(): CONN = get_conn() してみてください: CURとしてconn.cursor()で: SQL = " urlname`、` id`がNULLでない`のURLからurlhref`は`選択し、" カウント = cur.execute(SQL)を 印刷(カウント) #查询所有数据 #1 データ= cur.fetchall() #の印刷(データ) #查询指定条目数据 結果= cur.fetchmany(サイズ= 5 ) プリント(結果) 最後に: はconn.close() の場合 __name__ = = " __main__ ' : #get_wiki_data() get_data()