1. 程式人生 > >用Python寫一個簡單的爬蟲

用Python寫一個簡單的爬蟲

和朋友都灰常懶,不想上下滾動頁面看價格,所以寫了一個爬蟲,用於儲存商品價格。
環境:macOS、python3.5
IDE:pycharm
使用的庫:BeautifulSoup、urllib

BeautifulSoup:優秀的HTML/XML的解析器

需求

獲得商品價格,對應獲得商品名稱,另外就是下載商品的圖片

1.由上文,則需要在網頁原始碼中找到對應位置的資訊。

  • 用chrome的“檢查”即可檢視html原始碼。
    這裡寫圖片描述
  • 在原始碼中找到:代表商品價格的class = “Price”;
  • 含有商品全名的class = product-image;上一級class = product-image-and-name-container。(由於直接定位product-image會將其他非目標商品的資訊也蒐集下來,所以引入上級class。)
  • 用bs4的css選擇器(select方法)定位到含有上述class的位置。

2.儲存圖片的方法

all_image = name[i].find_all('img')#找到圖片的集合
for image in all_image:#print(all_image)
            urllib.request.urlretrieve(image['src'],"/Users/lixuefei/Desktop/test/%s.jpg" % (x))

3.全部程式碼

"""
Created by LiXuefei in 2017.07.26
"""
import urllib.request
from
bs4 import BeautifulSoup import pandas as pd # beautifulsoup方法 ## load html file def get_content(url): html = urllib.request.urlopen(url) content = html.read().decode("utf-8") # 轉碼 'ignore' html.close() # 一定要關閉網頁 return content def save_to_file(file_name, contents): fh = open(file_name,'w'
) fh.write(contents) fh.close() def get_txt(info): soup = BeautifulSoup(info,"lxml") # 設定解析器為“lxml” #print(soup) name = soup.select('.product-image-and-name-container > .product-image')#.product-name product-image price = soup.select('.Price') ##download img x = 0 for i in range(len(name)): all_image = name[i].find_all('img') urllib.request.urlretrieve(all_image[0]['src'], "/Users/lixuefei/Desktop/test/%s.jpg" % (x)) x += 1 ##download name,price for x in range(len(name)): name[x] = str(name[x]).split('=')#用=將字串分割 price[x] = str(price[x]).strip('<span class="Price">' + '</span>' + '\n')#去除css,只保留價格 for i in range(len(name)): name[i] = str(name[i][4]).strip('onload' + '" ')#第四段為名稱,選取名稱,並去除多餘的關鍵字 return name,price url = "http://www.chemistwarehouse.com.au/Shop-Online/587/Swisse" content = get_content(url) content_name,content_price = get_txt(content) df = pd.DataFrame() df['name'] = content_name df['price'] = content_price df.to_csv('/Users/lixuefei/Desktop/test.csv')

問題彙總

1.對於另一中文購物網站,出現了由於混合中文而導致轉碼出現問題,用’ignore’引數可以避免報錯,但是同時ignore引數會忽略商品的中文名稱。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 137363: invalid start byte
2.程式執行結果,會在資料夾裡下載我們需要的商品圖片,在另一個csv文件裡下載商品名稱及價格。如果能把圖片和名稱價格整合到一起更好,用資料庫?還沒想好更好的表現形式。

相關推薦

Python一個簡單爬蟲

和朋友都灰常懶,不想上下滾動頁面看價格,所以寫了一個爬蟲,用於儲存商品價格。 環境:macOS、python3.5 IDE:pycharm 使用的庫:BeautifulSoup、urllib BeautifulSoup:優秀的HTML/XML的解析

python一個簡單爬蟲功能

iOS開發如果之前沒接觸過除了c和c++(c++太難了,不花個十來年基本不可能精通)的語言,第二門語言最好的選擇就是python.原因就是 1.語法簡單 2.庫太多,隨便想要什麼功能的庫都找得到,簡直程式設計界的哆啦A夢. 3.語法優美,不信?你去看看py

python一個簡單爬蟲儲存在json檔案中

學習python沒多久,所以只能寫一個很簡單的爬蟲啦~~ 我使用annacada 自帶的spyder來寫爬蟲的,這次我們要爬取得網站是http://www.drugbank.ca/drugs, 主要是爬取裡面每種藥物的資訊到json檔案中,包括有 DrugBank ID, 

入門級Python一個簡單的網路爬蟲下載和獲取資料

學會如何使用API通過url(Uniform Resource Locator 統一資源定位符)連線網路,獲取網站的API獲取url儲存的API,request執行獲取的urlrequests.get(url) 定義一個變數,將API響應儲存在裡面,呼叫json將r儲存的ap

python一個簡單的excel表格獲取當時的linux系統信息

psutil 生成 之前 建立 set ces ext 流量 關閉 最近在學習excel表格的制作,順便結合之前學習的內容,利用python的兩個模板,分別是獲取系統信息的psutil,和生成excel表格的xlsxwriter。利用這兩個模板將生成一個簡單的excel表格

python一個簡單的詞法分析器

編譯原理老師要求寫一個java的詞法分析器,想了想決定用python寫一個。 目標 能識別出變數,數字,運算子,界符和關鍵字,用excel表打印出來。 有了目標,想想要怎麼實現詞法分析器。 1.先進行預處理,把註釋,多餘的空格,空行去掉。 2.一行一行掃

python一個簡單的推薦系統

前言 在上篇文章豆瓣電影,電視劇DM實戰中提及到,我和室友們產生了劇荒,萌生出要做一個個人用的推薦系統,解決劇荒的問題,經過一輪的死纏爛打,這個個人推薦系統終於成型了。 今天來分享一下心得,對此感興趣的朋友可以自己對著寫一個。 傳統推薦系統演算法 首先介紹一下傳統

python一個簡單計算器

1、利用迴圈新增按鈕部件,及給每個按鈕設定訊號/槽2、給按鈕設定固定大小:button.setFixedSize(QtCore.QSize(60,30))3、取事件的的傳送者(此例為各個按鈕)的文字: self.sender().text()#簡易計算器 import sys

python一個簡單的使用者登陸程式(要求成函式)

效能要求: 原始碼: dict1={} def log(): global dict1 print("|---新建使用者:N/n---|") print("|---賬戶登入:

webmagic一個簡單的網路爬蟲

用webmagic寫一個網路爬蟲(不是註解) 引入的jar包: 具體程式碼如下: import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import

python一個豆瓣短評通用爬蟲(登入、爬取、視覺化)

>原創技術公眾號:`bigsai`,本文在1024釋出,祝大家節日快樂,心想事成。 @[TOC](文章結構) ## 前言 在本人上的一門課中,老師對每個小組有個任務要求,介紹和完成一個小模組、工具知識的使用。然而我所在的組剛好遇到的是python爬蟲的小課題。 心想這不是很簡單嘛,搞啥呢?想著

Python一個批量生成賬號的函數(戶控制數據長度、數據條數)

shuf open 小寫 長度 數據 ase 函數 用戶控制 app # 1、寫一個函數,批量生成一些註冊使用的賬號:[email protected]/* */,長度由用戶輸入,產生多少條也由用戶輸入,用戶名不能重復,用戶名必須由大寫字母、小寫字母、數字組成

python一個簡單的接口

結果 服務 web框架 簡單的 bsp 16px 這樣的 flask span 寫一個接口: 1、用到的模塊是flask,flask是一個python的一個web框架,可以用來開發接口和web頁面 2、 啟動服務的效果是這樣的: 用postman測試的結

集合一個簡單的隨機分組,以及集合內元素數量查詢

移除 以及 表示 元素 move spa color 查詢 println 12個人,隨機分為4組 public static void main(String[] args) { List list = new ArrayList();

Python一個小遊戲

python 小腳本 剛學Python時間不長,但也知道了一點,看別人的參考寫了一個猜數字小遊戲,也算是禹學於樂吧。#!/usr/bin/env python #coding=utf-8

python一個九九乘法表-2月19日/2018

九九乘法 while -c pos ont 九九 pytho 九九乘法表 font first = 1 while first<=9:   sec=1   while sec<=first:     print(str(sec),"x",str(first),

Canvas一個簡單的遊戲--別踩白塊兒

來吧 ber -c [] for 輸入 itl event 內部   第一次寫博客也不知怎麽寫,反正就按照我自己的想法來吧!怎麽說呢?還是不要扯那些多余的話了,直接上正題吧! 第一次用canvas寫遊戲,所以挑個簡單實現點的來幹:別踩白塊兒,其他那些怎麽操作的那些就不用再扯

shell一個簡單的告警系統

shell用shell寫一個簡單的告警系統 創建目錄結構 mkdir -p /usr/local/sbin/mon/{bin,conf,shares,mail,log} mon //主目錄 bin //主程序目錄 shares //子程序目錄 mail //發郵件目錄 log //日誌目錄 程序主入

python一個restful API

python restful # -*- coding: utf-8 -*- # 作者: 煮酒品茶 """ package.module ~~~~~~~~~~~~~~ python實現的圖書的一個restful api. 參考restful設計指南 URL:

python一個微信聊天機器人

python wechat 聊天機器人 # -*- coding: utf-8 -*- """ package.module ~~~~~~~~~~~~~~ 一個微信機器人程序 微信客戶端itchat: http://itchat.readthed