Всего три трюка, чтобы освоить все навыки простого сканера веб-сайтов

Сегодня я поделюсь некоторыми советами по сбору трех краулерных веб-сайтов. Надеюсь, это будет вам полезно~

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

requests使用

BeautifulSoup使用

Просмотр исходного кода веб-страницы и проверка элементов

вставьте сюда описание изображения

Не думайте, что это очень просто, эти два трюка лежат в основе краулеров. Если вы знакомы с этими двумя приемами, вы изучите половину простого сканера веб-сайтов.

Вообще говоря, все, что вы видите в проверяемом элементе, появляется в исходном коде веб-страницы. Пример, который я выбрал сегодня, имеет особую ситуацию: содержимое проверочного элемента появится в исходном коде веб-страницы.

вставьте сюда описание изображения

Например, поднимитесь на дневную и ночную температуру в Пекине.

Веб-сайт погоды в Пекине:

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 можно легко связать с содержимым, видимым, проверив элемент в браузере»? Что это значит?

Простое объяснение состоит в том, что элемент проверки выглядит аналогично элементу объекта Soup (это всего лишь упрощенное понимание).

вставьте сюда описание изображения

синтаксис селектора CSS

Стоит отметить, что при поиске "p.temem" есть ровно 2 совпадающих объекта, соответствующих дневной температуре и ночной температуре соответственно. Это очень важно. Если количество совпадений больше или меньше 2, то это означает, что ваш селектор CSS пишет неправильно!

вставьте сюда описание изображения

Измеряйте дневную и ночную температуру в нескольких городах, ищите информацию о погоде в разных городах и наблюдайте за изменением URL-адресов. Наблюдение за изменениями URL-адресов — один из самых важных навыков сканеров~

# -*- 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 — это сторонний набор инструментов для анализа веб-страниц HTML, предоставляемый Python. Для URL-адреса вы можете использовать функции-члены объекта beautifulSoup, чтобы напрямую найти содержимое соответствующего компонента. Что касается такого контента, как текст и информация, то он часто записывается непосредственно в текстовый код веб-страницы. Используя инструменты разработчика браузера Google, мы можем напрямую прочитать исходный код веб-страницы:

вставьте сюда описание изображения

Вы можете использовать маленькую стрелку справа, чтобы напрямую найти позицию, которую необходимо просканировать, и обнаружить, что информация записана непосредственно в исходном коде справа. Текстовую информацию не нужно обновлять в режиме реального времени, а удобный способ хранения данных отсутствует.

Используйте объект 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 — это регулярные выражения, поэтому функции-члены также схожи.

рекомендация

отblog.csdn.net/Z987421/article/details/132746254