天天看點

爬蟲學習筆記(一)

這次要爬取的資料是北京新發地網站上的菜價,這是我根據别人的視訊學的,後面對代碼進行了部分改進

北京新發地網址:http://www.xinfadi.com.cn/

進入網址之後點選價格即可檢視菜價,右鍵檢視頁面源代碼,随機查找目前頁面的一種菜品,固定要找資料的大緻位置。

所有資料在td裡面,直接查找td不現實,所有的資料又放在table裡面,直接查找table也不現實,而我們要查找的資料在<table class="hq_table>中

注意事項如下:

1.需要具備初步html知識,table是表格,tr是表格的行,td是表格的列

2.BeautifulSoup處理頁面源代碼時,要根據自己的需要選擇解析語言(本例中是html)

3.

1)find(标簽,屬性=值) 隻找一個

2)find_all(标簽,屬性=值) 查找全部

4.由于class是python中的關鍵字,标簽可以使用字典,也可以使用class_表示

筆記代碼如下:

import requests
import bs4
import csv
from bs4 import BeautifulSoup

# 拿到頁面源代碼
i = 1
while i <= 3:
    url = f"http://www.xinfadi.com.cn/marketanalysis/0/list/{i}.shtml"
    resp = requests.get(url)
    # print(resp.text)
    # 寫入檔案
    f = open(f"第{i}頁菜價.csv", mode="w")
    csvwriter = csv.writer(f)
    # 解析資料
    # 1.把頁面源代碼交給BeautifulSoup進行處理,生成bs4對象
    page = BeautifulSoup(resp.text, "html.parser")
    # 2.從bs對象中查找資料
    # table = page.find("table", class_="hq_table")#class_表示
    table = page.find("table", attrs={"class": "hq_table"})  # 字典表示
    trs = table.find_all("tr")[1:]
    for tr in trs:
        tds = tr.find_all("td")  # 每行中的每一列
        name = tds[0].text  # .text表示拿到呗标簽标記的内容,菜品名稱
        low = tds[1].text  # .text表示拿到呗标簽标記的内容,菜品最低價
        average = tds[2].text  # .text表示拿到呗标簽标記的内容,菜品平均價
        high = tds[3].text  # .text表示拿到呗标簽标記的内容,菜品最高價
        size = tds[4].text  # .text表示拿到呗标簽标記的内容,菜品規格
        kind = tds[5].text  # .text表示拿到呗标簽标記的内容,菜品種類
        date = tds[6].text  # .text表示拿到呗标簽标記的内容,菜品上市日期
        csvwriter.writerow([name, low, average, high, size, kind, date])
    # print("over!")
    i += 1

f.close()
print("over!")

           

想知道第幾頁到第幾頁的菜價,隻需要改i的值即可

本文隻是為了防止哪天再次重裝系統的時候資料未備份時所寫,大家看着玩就好。