今日は、3つのクローラーWebサイトを収集するためのヒントをいくつか紹介します。
查看网页源代码和检查元素
requests使用
BeautifulSoup使用
Web ページのソース コードを表示し、要素を検査する
それほど単純だとは思わないでください。これら 2 つのトリックがクローラーの基礎です。これら 2 つのトリックに精通している場合は、単純な Web サイト クローラーの半分を学習したことになります。
一般に、検査された要素内に表示されるものはすべて、Web ページのソース コードに表示されます。今日選んだ例は特殊な状況で、check 要素に表示される内容が Web ページのソース コードに表示されます。
たとえば、北京では昼と夜の気温が上昇します。
北京天気のウェブサイト:
http://www.weather.com.cn/weather1d/101010100.shtml
以下はソースコードです。コメントして、一緒に読んでください。
Talk is cheap. Show you the code
# -*- coding: utf-8 -*-
__author__ = 'duohappy'
import requests # 导入requests模块
from bs4 import BeautifulSoup # 从bs4包中导入BeautifulSoup模块
# 设置请求头
# 更换一下爬虫的User-Agent,这是最常规的爬虫设置
headers = {
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/57.0.2987.110 Safari/537.36'}
# 需要爬取的网址
url ="http://www.weather.com.cn/weather1d/101010100.shtml"
# 发送请求,获取的一个Response对象
web_data = requests.get(url,headers=headers)
# 设置web_data.text会采用web_data.encoding指定的编码,一般情况下不需要设置,requests会自动推断
# 鉴于网页大部分都是采取utf-8编码的,所以设置一下,省去一些麻烦
web_data.encoding = 'utf-8'
# 得到网页源代码
content = web_data.text
# 使用lxml解析器来创建Soup对象
soup = BeautifulSoup(content, 'lxml')
# 为什么要创建一个Soup对象,还记得浏览器中的检查元素功能嘛
# Soup对象可以方便和浏览器中检查元素看到的内容建立联系,下面会有动画演示
# 使用css selector语法,获取白天和夜间温度,下面有动画演示
tag_list = soup.select('p.tem span')
# tag_list[0]是一个bs4.element.Tag对象
# tag_list[0].text获得这个标签里的文本
day_temp = tag_list[0].text
night_temp = tag_list[1].text
print('白天温度为{0}℃n晚上温度为{1}℃'.format(day_temp, night_temp))
「スープ オブジェクトは、ブラウザで要素を検査することで表示されるコンテンツに簡単に接続できます。」とはどういう意味ですか?
簡単に説明すると、要素をチェックしたときに表示される内容は、Soup オブジェクト内の要素とほぼ同じであるということです (これは単なる単純化した理解です)。
CSSセレクター構文
「p.temem」を検索すると、日中の気温と夜間の気温に対応する、一致するオブジェクトが 2 つだけ存在することに注意してください。これは非常に重要です。一致の数が 2 より大きいか小さい場合は、それを意味します。 CSS セレクターの書き込みが間違っていることを意味します。
複数の都市の昼と夜の気温を調べ、さまざまな都市の天気を検索し、URL の変化を観察します。URL の変更を観察することは、クローラーの最も重要なスキルの 1 つです~
# -*- coding: utf-8 -*-
__author__ = 'duohappy'
import requests
from bs4 import BeautifulSoup
headers = {
"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome/57.0.2987.110 Safari/537.36'}
# 建立城市和网址特殊部分的对应关系
weather_code = {
'北京':'101010100','上海':'101020100','深圳':'101280601', '广州':'101280101', '杭州':'101210101'}
city = input('请输入城市名:') # 仅仅能输入北京,上海,广州,深圳,杭州
url ="http://www.weather.com.cn/weather1d/{}.shtml".format(weather_code[city])
web_data = requests.get(url,headers=headers)
web_data.encoding = 'utf-8'
content = web_data.text
soup = BeautifulSoup(content, 'lxml')
tag_list = soup.select('p.tem span')
day_temp = tag_list[0].text
night_temp = tag_list[1].text
print('白天温度为{0}℃n晚上温度为{1}℃'.format(day_temp, night_temp))
美しいスープ
BeautifulSoup は、Python によって提供されるサードパーティの HTML Web ページ解析ツールキットです。URL の場合、 beautifulSoup オブジェクトのメンバー関数を使用して、対応するコンポーネントのコンテンツを直接検索できます。テキストや情報などのコンテンツは、Web ページのテキスト コードに直接書き込まれることがよくあります。Google Chrome の開発者ツールを使用すると、Web ページのソース コードを直接読み取ることができます。
右側の小さな矢印を使用して、クロールする必要がある場所を直接見つけることができます。この情報は右側のソース コードに直接書き込まれていることがわかります。テキスト情報はリアルタイムで更新する必要がなく、データを維持する便利な方法もありません。
検索と処理に bs オブジェクトを使用すると、簡単なコードを作成できます。
1.bs = BeautifulSoup(html_news,'html.parser')
2.title = bs.find('h1').text
3.content= bs.find('div',class_='content-article').text //注意参数带下划线
4.content_str = "".join(re.findall('[0-9\u4e00-\u9fa5]', content))
ただし、すべての段落が p コンポーネント内にあることがわかるため、コードは次のように記述することもできます。 コードは次のとおりです (例):
1.cur_str = ""
2.bs = BeautifulSoup(html_news,'html.parser')
3.title = bs.find('h1').text
4.paras = bs.find_all('p',class_='one-p') //返回一个列表
5.for para in paras:
6.cur_str += "".join(re.findall('[0-9\u4e00-\u9fa5]', para.text))
ここでは正規表現を使用してテキストと数値を抽出します。find 関数は要素を検索するのに対し、find_all はリストを返すという事実に特に注意してください。re.find_all が検索するものもリストです。返すときは、"".join を使用して文字列に連結する必要があります。実際、BeautifulSoup の最下層は正規表現なので、メンバー関数も同様です。