Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Methode zum Crawlen von 51cto-Daten in Python und zum Speichern dieser in MySQL

Detaillierte Erläuterung der Methode zum Crawlen von 51cto-Daten in Python und zum Speichern dieser in MySQL

coldplay.xixi
coldplay.xixinach vorne
2020-08-25 16:29:172270Durchsuche

?? Installieren Sie die Umgebung und Module

Detaillierte Erläuterung der Methode zum Crawlen von 51cto-Daten in Python und zum Speichern dieser in MySQLBitte beachten Sie https://www.jb51.net/article/194104.htm

2. Schreiben Sie den Code

# 51cto 博客页面数据插入mysql数据库
# 导入模块
import re
import bs4
import pymysql
import requests

# 连接数据库账号密码
db = pymysql.connect(host='172.171.13.229',
           user='root', passwd='abc123',
           db='test', port=3306,
           charset='utf8')
# 获取游标
cursor = db.cursor()

def open_url(url):
  # 连接模拟网页访问
  headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '
           'Chrome/57.0.2987.98 Safari/537.36'}
  res = requests.get(url, headers=headers)
  return res

# 爬取网页内容
def find_text(res):
  soup = bs4.BeautifulSoup(res.text, 'html.parser')

  # 博客名
  titles = []
  targets = soup.find_all("a", class_="tit")
  for each in targets:
    each = each.text.strip()
    if "置顶" in each:
      each = each.split(' ')[0]
    titles.append(each)

  # 阅读量
  reads = []
  read1 = soup.find_all("p", class_="read fl on")
  read2 = soup.find_all("p", class_="read fl")
  for each in read1:
    reads.append(each.text)
  for each in read2:
    reads.append(each.text)

  # 评论数
  comment = []
  targets = soup.find_all("p", class_='comment fl')
  for each in targets:
    comment.append(each.text)

  # 收藏
  collects = []
  targets = soup.find_all("p", class_='collect fl')
  for each in targets:
    collects.append(each.text)

   # 发布时间
  dates=[]
  targets = soup.find_all("a", class_='time fl')
  for each in targets:
    each = each.text.split(':')[1]
    dates.append(each)

  # 插入sql 语句
  sql = """insert into blog (blog_title,read_number,comment_number, collect, dates)
  values( '%s', '%s', '%s', '%s', '%s');"""
  # 替换页面 \xa0
  for titles, reads, comment, collects, dates in zip(titles, reads, comment, collects, dates):
    reads = re.sub('\s', '', reads)
    comment = re.sub('\s', '', comment)
    collects = re.sub('\s', '', collects)
    cursor.execute(sql % (titles, reads, comment, collects,dates))
    db.commit()
    pass

# 统计总页数
def find_depth(res):
  soup = bs4.BeautifulSoup(res.text, 'html.parser')
  depth = soup.find('li', class_='next').previous_sibling.previous_sibling.text
  return int(depth)

# 主函数
def main():
  host = "https://blog.51cto.com/13760351"
  res = open_url(host) # 打开首页链接
  depth = find_depth(res) # 获取总页数

  # 爬取其他页面信息
  for i in range(1, depth + 1):
    url = host + '/p' + str(i) # 完整链接
    res = open_url(url) # 打开其他链接
    find_text(res) # 爬取数据

  # 关闭游标
  cursor.close()
  # 关闭数据库连接
  db.close()

if __name__ == '__main__':
  main()
3..MySQL erstellt die entsprechende Tabelle

4 und sehen Sie sich den Effekt an:


Verbesserte Version:

Verbesserter Inhalt:

1. Einige Felder in der Datenbank können nur Zahlen speichern

2 Standardmäßig besteht der gecrawlte Inhalt aus Zeichenfolgen, in denen einige gespeichert sind Felder der Datenbank. Es ist am besten, sie in einen Ganzzahltyp zu ändern.

1 Der Code lautet wie folgt: rrree

überprüfen

aktualisierte Version

Um es Anfängern zu erleichtern Mit diesem Programm können Sie dieses Projekt in eine Datei im Exe-Format packen, sodass andere den Code auf einem Computer ausführen können, was sehr praktisch ist!

1. Verbessern Sie den Code:

rrree

2. Installieren Sie das Paketierungsmodul pyinstaller


3. Wechseln Sie zum Pfad, in den der Code gepackt werden muss


2. Führen Sie im cmd-Fenster pyinstaller -F test03.py aus (test03 ist der Projektname)

4. Das Verzeichnis dist wird nach dem Packen angezeigt

5. Führen Sie das Exe-Paket aus und überprüfen Sie die Wirkung. Überprüfen Sie die Datenbank. Verwandte Lernempfehlungen:

MySQL-Tutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Methode zum Crawlen von 51cto-Daten in Python und zum Speichern dieser in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen