Seulement trois astuces pour acquérir toutes les compétences d’un simple robot d’exploration de site Web

Aujourd'hui, je vais partager quelques conseils sur la collecte de trois sites Web d'exploration. J'espère que cela vous sera utile ~

查看网页源代码和检查元素

requests使用

BeautifulSoup使用

Afficher le code source de la page Web et inspecter les éléments

Insérer la description de l'image ici

Ne pensez pas que ce soit très simple, ces deux astuces sont la base des robots. Si vous connaissez ces deux astuces, vous aurez appris la moitié du simple robot d'exploration de site Web.

De manière générale, tout ce que vous voyez dans l'élément inspecté apparaît dans le code source de la page Web. L'exemple que j'ai choisi aujourd'hui a une situation particulière : le contenu vu dans l'élément check apparaîtra dans le code source de la page web.

Insérer la description de l'image ici

Par exemple, faites grimper les températures diurnes et nocturnes à Pékin

Site Web de la météo à Pékin :

http://www.weather.com.cn/weather1d/101010100.shtml

Ci-dessous le code source, je vais le commenter, le lire avec lui

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))

Que signifie « L'objet Soup peut être facilement connecté au contenu affiché en inspectant l'élément dans le navigateur » ? Qu'est-ce que cela signifie ?

Une explication simple est que ce que vous voyez lorsque vous vérifiez l'élément est presque le même que l'élément dans l'objet Soup (ce n'est qu'une compréhension simplifiée)

Insérer la description de l'image ici

syntaxe du sélecteur CSS

Il est à noter que lors de la recherche de "p.temem", il y a exactement 2 objets correspondants, correspondant respectivement à la température diurne et à la température nocturne. Ceci est très important. Si le nombre de correspondances est supérieur ou inférieur à 2, alors il signifie que votre sélecteur CSS écrit mal !

Insérer la description de l'image ici

Augmentez les températures diurnes et nocturnes de plusieurs villes, recherchez la météo dans différentes villes et observez les changements dans les URL. Observer les changements dans les URL est l'une des compétences les plus importantes des robots d'exploration~

# -*- 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))

BelleSoupe

BeautifulSoup est une boîte à outils d'analyse de pages Web HTML tierce fournie par Python. Pour une URL, vous pouvez utiliser les fonctions membres de l'objet beautifulSoup pour rechercher directement le contenu du composant correspondant. Pour le contenu tel que le texte et les informations, il est souvent écrit directement dans le code texte de la page Web. Grâce aux outils de développement de Google Chrome, nous pouvons lire directement le code source de la page web :

Insérer la description de l'image ici

Vous pouvez utiliser la petite flèche à droite pour localiser directement l'emplacement qui doit être exploré, et vous constaterez que ces informations sont écrites directement dans le code source à droite. Les informations textuelles n'ont pas besoin d'être mises à jour en temps réel et il n'existe aucun moyen pratique de conserver les données.

Utilisez l'objet bs pour la recherche et le traitement, afin que nous puissions écrire un code simple :

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))

Mais nous pouvons voir que tous les paragraphes sont dans le composant p, donc le code peut aussi être écrit comme ceci : Le code est le suivant (exemple) :

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))

Les expressions régulières sont utilisées ici pour extraire du texte et des nombres. Portez une attention particulière au fait que la fonction find trouve un élément, tandis que find_all renvoie une liste. Ce que re.find_all trouve est également une liste. Lors du retour, "".join doit être utilisé pour la concaténer en une chaîne. En fait, la couche inférieure de BeautifulSoup est constituée d'expressions régulières, donc les fonctions membres sont également similaires.

Je suppose que tu aimes

Origine blog.csdn.net/Z987421/article/details/132746254
conseillé
Classement