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

coldplay.xixi
Freigeben: 2020-08-25 16:29:17
nach vorne
2277 Leute haben es durchsucht

?? 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!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage