1. 程式人生 > >python 簡單爬取本地文件與爬取網頁 使用requests和bs4,及自己問題的解決

python 簡單爬取本地文件與爬取網頁 使用requests和bs4,及自己問題的解決

爬取本地文件:

 

 # -*- coding: cp936 -*-
#import requests
from bs4 import BeautifulSoup
def getZY():
    txt=open("d:\cs.txt")
    con=txt.read()
    
    print(con)
    
    soup = BeautifulSoup(con, "html.parser")

    hu=soup.find_all('span')   #{'class':'t3'}
    #hu=soup.find_all('span',{'class':'t3'})   #{'class':'t3'}
    for h in hu:
        print(h.get_text())
    
def main():
    getZY();
main()

爬取網頁(亂碼!):

 

 # -*- coding: cp936 -*-
import requests
from bs4 import BeautifulSoup
def getHTMLText(url):
    try:
        r = requests.get(url, timeout = 30)
        #r.content.decode('gbk','ignore')
        r.raise_for_status()
        #r.encoding = 'utf-8'
        return r.text
    except:
        return ""
    
def getContent(url):
    html = getHTMLText(url)
    #print(html)
    
    soup = BeautifulSoup(html, "html.parser")
    #print(soup)
    divs=soup.find_all('div',{'class':"el"})
    
    #print(divs)
    
    for div in divs:
        try:
            t3=div.find('span',{'class':'t3'}).get_text()
            print(t3)
            t4=div.find('span',{'class':'t4'}).get_text()
            print(t4)
            t5=div.find('span',{'class':'t5'}).get_text()
            print(t5)
        except:
            print("t3 or t4 ot t5 not find,this can be ignore")
        
    print("over!")
def main():
    getContent(url);
url = "https://search.51job.com/list/010000%252C020000%252C030200%252C040000,000000,0000,00,9,99,python%2520java,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare="
main()

 

問題:

emmm暑假做過一點爬蟲 關於 企業家 的資訊 當時看的是 封皮是一個動物 屬於圖靈一系列的 叫啥忘了....當時遇到的問題是:

1. 亂碼(現在還是迷糊)

2. 網頁跳轉(可以通過函式呼叫 實現通過一個網頁得到另一個網頁的內容 )

3. 使用Ajax爬取

4. 有的內容是後臺返回給網頁 爬取不到

5. 搜問題的時候遇到了 頁數是什麼+1,但是我在函式呼叫的時候直接page+1,所以並沒有遇到搜到的那個問題

6. 沒有嘗試 模擬點選過程

7. 沒有隱藏自己 的資訊 輕易的就能被發現....

 

 

6~解決:

# -*- coding: cp936 -*-
# 訪問百度,模擬自動輸入搜尋

# 程式碼中引入selenium版本為:3.4.3
# 通過Chrom瀏覽器訪問發起請求
# 需要對應版本的Chrom和chromdriver
#chromdriver需要下載與本機chrom瀏覽器對應的版本
#https://chromedriver.storage.googleapis.com/index.html
#下載後放在chrom.exe檔案下 並配置path  但依舊會出錯
#簡單暴力的直接放在 本指令碼檔案對應的目錄下

#此程式碼來自https://blog.csdn.net/qq_878799579/article/details/73321015
#執行中錯誤及補充見 https://blog.csdn.net/qq_39065788?t=1

from selenium import webdriver
# 引入Keys類包 發起鍵盤操作
from selenium.webdriver.common.keys import Keys
import time

driver = webdriver.Chrome()
# 訪問百度
driver.get('http://www.baidu.com')

# 輸入框輸入內容
driver.find_element_by_id('kw').send_keys('python')
# 3s
time.sleep(3)

# 刪除多輸入的一個m  (刪除操作 模擬鍵盤的Backspace)
driver.find_element_by_id('kw').send_keys(Keys.BACK_SPACE)
time.sleep(3)

# 輸入空格 + '教程'
driver.find_element_by_id('kw').send_keys(Keys.SPACE)
driver.find_element_by_id('kw').send_keys(u"教程")
time.sleep(3)

# 模擬ctrl+a 操作 全選輸入框內容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'a')
time.sleep(3)

# 模擬Ctrl+X 操作 剪下輸入框內容
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'x')
time.sleep(3)

# 模擬Ctrl+V 操作  將剪下內容填入輸入框
driver.find_element_by_id('kw').send_keys(Keys.CONTROL, 'v')
time.sleep(3)

# 模擬回車操作 ,開始搜尋
driver.find_element_by_id('su').send_keys(Keys.ENTER)
time.sleep(3)

# 退出
driver.quit()

對應chromDriver版本:

ChromDriver對應版本