Pythonクローラーを使用してWebページの情報をクロールする方法は?
例としてBooksto Scrapeを取り上げ、アドレス:http://books.toscrape.com/
まず、リクエストライブラリとBeautifulSoupをインポートします
import requests
from bs4 import BeautifulSoup
URLのソースコード情報を取得する
url = 'http://books.toscrape.com/'
res = requests.get(url)
print(res.status_code) # 查看是否获取成功,成功则显示200
html = res.text
F12または右クリックして、Webページコードを確認します。
本のタイトルが<li>ブロックにあることを確認し、beauオブジェクトを作成して、findステートメントを検索します。
BeautifulSoupを介してソースコードを受信および配置するための空のリストを作成します。
book_list = [] # 空列表用于后面的接收
soup = BeautifulSoup(html, 'lxml')
beau = soup.find('ul', class_='nav nav-list').find('ul').find_all('li')
beauオブジェクトをトラバースするようにパラメータqを設定します。別のeach1オブジェクトを追加して、パラメーターqのハイパーリンク部分を見つけます。次に、2つのパラメーターiとxを設定して、enumerateとbook_listをトラバースし、それぞれループに出力します:シーケンス、本のタイトル、アドレスリンク。
(列挙関数は0から開始するため、出力順序を1から開始する場合は、i + 1を実行し、リンク部分の各1オブジェクトの「href」を選択します)
for q in beau:
book_list.append(q.a.text.strip()) # 此时,用book_list接收书名文字
each1 = q.find('a')
for i, x in enumerate(book_list):
print(i+1, '书名:' + x + '\t 网址:' + url + each1['href'] + '\n')
この時点で、「シーケンス+本のタイトル+ URLリンク」を取得できます。Python
の本質は「効率的」です!
最後に、本のタイトルと対応するURLリンクをクロールするために必要なコードの簡略版、クロールを実現するための8行のコードを添付してください。
import requests
from bs4 import BeautifulSoup
beau = BeautifulSoup(requests.get('http://books.toscrape.com/').text, 'lxml').find('ul', class_='nav nav-list').find('ul').find_all('li')
book_list = []
for q in beau:
book_list.append(q.a.text.strip())
for i, x in enumerate(book_list):
print(i+1, '书名:' + x + '\t 网址:' + 'http://books.toscrape.com/' + q.find('a')['href'] + '\n')