《Python金融大數據挖掘與分析全流程詳解》網頁爬蟲 筆記整理

3.1 提取百度新聞標題、網址、日期及來源

# =============================================================================
# 3.1 百度新聞數據挖掘 by 王宇韜
# =============================================================================

import requests
import re

#headers參數提供的是網站訪問者的信息,headers中User-Agent表示的是用什麼瀏覽器訪問的。下面用的是谷歌瀏覽器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'}

url = 'https://www.baidu.com/s?tn=news&rtt=1&bsst=1&cl=2&wd=阿里巴巴'  # 把鏈接中rtt參數換成4即是按時間排序,默認爲1按焦點排序,3.4.1小節也有講到
res = requests.get(url, headers=headers).text  # 加上headers用來告訴網站這是通過一個瀏覽器進行的訪問
# print(res)

p_info = '<p class="c-author">(.*?)</p>'
#存儲findall函數查找到的內容的列表
info = re.findall(p_info, res, re.S)
#用正則表達式提取標題
p_href = '<h3 class="c-title">.*?<a href="(.*?)"'
href = re.findall(p_href, res, re.S)

p_title = '<h3 class="c-title">.*?>(.*?)</a>'
title = re.findall(p_title, res, re.S)
# print(info)  # 常通過打印列表及列表長度,先看看獲取的內容是否正確
# print(len(info))
# print(href)
# print(len(href))
# print(title)
# print(len(title))

source = []  # 先創建兩個空列表來儲存等會分割後的來源和日期
date = []
for i in range(len(info)):
    #用strip把不需要的空格和換行符去掉
    title[i] = title[i].strip()
    #用sub()處理<em></em>。<.*?>表示任何形式爲<xxx>的內容。
    title[i] = re.sub('<.*?>', '', title[i])
    info[i] = re.sub('<.*?>', '', info[i])
    source.append(info[i].split('&nbsp;&nbsp;')[0])
    date.append(info[i].split('&nbsp;&nbsp;')[1])
    source[i] = source[i].strip()
    date[i] = date[i].strip()

    print(str(i + 1) + '.' + title[i] + '(' + date[i] + '-' + source[i] + ')')
    print(href[i])

8.1 IP代理

所謂IP代理就是把本機的地址僞裝成其他IP地址。

# =============================================================================
# 8.1 爬蟲進階1-IP代理簡介 by 王宇韜
# =============================================================================

import requests
#IP代理地址是需要自己買的
proxy = requests.get('http://api.xdaili.cn/xdaili-api//greatRecharge/getGreatIp?spiderId=b030195e2075469299bca6b661c913ff&orderno=YZ201810262456rdpAb0&returnType=1&count=1').text
proxy = proxy.strip()  # 這一步非常重要,因爲要把看不見的換行符等給清除掉
print(proxy)
proxies = {"http": "http://"+proxy, "https": "https://"+proxy}
#要訪問的地址
url = 'https://httpbin.org/get'
#使用代理IP訪問
res = requests.get(url, proxies=proxies).text
print(res)

8.2 Selenium庫詳解

Selenium庫可以驅動瀏覽器模擬人的操作,如鼠標單擊、鍵盤輸入等,它可以獲得網頁中動態渲染出來的數據,而這些數據往往纔是有用的數據,因此這是一個比較重要的庫。但是,Selenium庫的訪問速度要比Requests庫慢,所以一般只有複雜的網站纔有它。

# =============================================================================
# 8.2 爬蟲進階2-爬蟲利器selenium庫詳解 by 王宇韜
# =============================================================================

# 1.打開及關閉網頁+網頁最大化
from selenium import webdriver
browser = webdriver.Chrome()
#將模擬器窗口最大化
browser.maximize_window()
browser.get("https://www.baidu.com/")
browser.quit()

# 2.xpath方法來定位元素,xpath可以理解爲是元素的名字或id
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
#模擬在搜索框裏輸入“python”關鍵詞。
browser.find_element_by_xpath('//*[@id="kw"]').send_keys('python')
#模擬點擊
browser.find_element_by_xpath('//*[@id="su"]').click()

# 3.css_selector方法來定位元素
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
browser.find_element_by_css_selector('#kw').send_keys('python')
browser.find_element_by_css_selector('#su').click()

# 4.browser.page_source方法來獲取模擬鍵盤鼠標點擊,百度搜索python後的網頁源代碼
from selenium import webdriver
import time
browser = webdriver.Chrome()
browser.get("https://www.baidu.com/")
browser.find_element_by_xpath('//*[@id="kw"]').send_keys('python')
browser.find_element_by_xpath('//*[@id="su"]').click()
time.sleep(3)  # 因爲是點擊按鈕後跳轉,所以最好休息3秒鐘再進行源代碼獲取,如果是直接訪問網站,則通常不需要等待。
data = browser.page_source
print(data)

# 5.browser.page_source方法來獲取新浪財經股票信息
from selenium import webdriver
browser = webdriver.Chrome()
browser.get("http://finance.sina.com.cn/realstock/company/sh000001/nc.shtml")
data = browser.page_source
print(data)

# 6.Chrome Headless無界面瀏覽器設置
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
#不彈出模擬瀏覽器,在後臺運行
chrome_options.add_argument('--headless')
browser = webdriver.Chrome(chrome_options=chrome_options)
browser.get("http://finance.sina.com.cn/realstock/company/sh000001/nc.shtml")
data = browser.page_source
print(data)

 

發佈了27 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章