Grundlegende Verwendung des Python-Crawlers bs4
Haftungsausschluss: Seit der Veröffentlichung dieses Artikels dient dieser Artikel nur als Referenz und darf nicht reproduziert oder kopiert werden. Wenn die Partei, die diesen Artikel durchsucht, an einem Verstoß gegen nationale Gesetze und Vorschriften beteiligt ist, trägt die Partei, die diesen Artikel durchsucht, alle Konsequenzen und hat nichts mit dem Blogger dieses Artikels zu tun. Und aufgrund des Nachdrucks, Kopierens und anderer Vorgänge der Partei, die diesen Artikel durchsucht, werden alle Streitigkeiten, die durch Verstöße gegen nationale Gesetze und Vorschriften und alle Konsequenzen verursacht werden, von der Partei getragen, die diesen Artikel durchsucht, und haben nichts mit dem Blogger dieses Artikels zu tun.
import requests
from bs4 import BeautifulSoup
1. bs4 Grundsyntax
1.1 HTML-Seite abrufen
Holen Sie sich lokale HTML-Seite
# 读取文件
fp = open("./data/base/taobao.html", "r", encoding="UTF-8")
# 数据加载到该对象中 (本地的 html 文件)
html = BeautifulSoup(fp, "lxml")
print(html)
Lesen Sie die Website, um die HTML-Seite zu erhalten
# 爬取页面
response_text = requests.get(url="https://s.taobao.com/").text
# 数据加载到该对象中 (网络的 html 文件)
html = BeautifulSoup(response_text, "lxml")
print(html)
1.2 Tags abrufen
soup.<tagName>
Die erste gibt standardmäßig None zurück, wenn keine solche Bezeichnung vorhanden ist
print(html.a)
print(html.img)
print(html.input)
soup.find(<tagName>)
Entspricht Suppe. <TagName> Standard zuerst
print(html.find("a"))
print(html.find("img"))
print(html.find("input"))
soup.find(<tagName>, <tagName.class>)
Die Positionierung von Tag-Attributen, einschließlich <tagName.class>, kann gesucht werden
print(html.find("div", class_="site-nav"))
soup.find_all(<tagName>)
Alle Tags, der Rückgabewert ist List
print(html.find_all("a"))
print(html.find_all("input"))
soup.select(<select>)
Verwenden Sie die Klassenauswahl, um Tags und alle Tags zu finden. Der Rückgabewert ist List
print(html.select(".bang"))
print(html.select("#J_SearchForm .search-button"))
print(html.select(".copyright"))
1.3 Holen Sie sich den Inhalt in das Etikett
text/get_text()
: Alle Inhalte
string
abrufen Direkte Inhalte abrufen
print(html.find("div", class_="search-button").text)
print(html.find("div", class_="search-button").string)
print(html.find("div", class_="search-button").get_text())
1.4 Holen Sie sich die Attribute in die Beschriftung
[<attribute>]
print(html.a["href"])
print(html.find("div")["class"])
print(html.find_all("div")[5]["class"])
2. Beispiele
Artikelinhalt von Three Kingdoms
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import requests
from bs4 import BeautifulSoup
if __name__ == '__main__':
# url, UA, 参数
url = "https://www.shicimingju.com/book/sanguoyanyi.html"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0"
}
# 爬取页面
html = requests.get(url=url, headers=headers, timeout=5).text
# 数据加载到该对象中 (网络的 html 文件)
soup = BeautifulSoup(html, "lxml")
# 得到想要的标签 (含有章节的)
content = soup.select("div.book-mulu > ul > li > a")
# 文件
fp = open("./data/sgyy/sgyy.txt", "w", encoding="utf-8")
fp.write("章节\t链接\t内容\n")
for c in content:
# 爬取章节详细叙述的内容
href_text = requests.get(url="https://www.shicimingju.com" + c["href"], headers=headers, timeout=5).text
# 添加章节详细叙述的内容
href_soup = BeautifulSoup(href_text, "lxml")
href_text = href_soup.find("div", class_="chapter_content").text
# 添加章节的名称, 链接, 内容.
fp.write(f'{c.text}\t{"https://www.shicimingju.com" + c["href"]}\t{href_text}\n')
print(c.text + " 添加完成")
fp.close()