12月13日
阿新 • • 發佈:2021-12-13
今天做空值的補缺,我的想法是點選表,選擇欄位,根據欄位展示有空值的資料,然後根據電影的名稱呼叫python來獲取電影的釋出時間等資訊,我按照這個想法進行去。
這是java呼叫python,第一次使用很新奇
public nullbaen getpy(){ nullbaen n=null; try { System.out.println("start"); String url="https://movie.douban.com/subject/25800445/"; String[] args1=newString[]{"python","E:\\pythonchrome\\jueceshu\\javapy.py",url}; Process pr=Runtime.getRuntime().exec(args1); BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream())); String line; while ((line = in.readLine()) != null) { n=new nullbaen(line,line,line); } in.close(); pr.waitFor(); System.out.println("end"); } catch (Exception e) { e.printStackTrace(); } System.out.println(n.getTitie()); return n; }
將具體的網址傳入python,然後python進行爬取資訊
from bs4 import BeautifulSoup import sys import urllib import re import json import requests from lxml import etree headers = { "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" } def get_page(url): try: response = requests.get(url, headers=headers) if response.status_code == 200: # print('獲取網頁成功') # print(response.encoding) return response.text else: print('獲取網頁失敗') except Exception as e: print(e) if __name__ == '__main__': # print('java 呼叫python指令碼成功') # page=get_page('https://movie.douban.com/subject/25800445/') # html = etree.HTML(page) # content1 = html.xpath('//span[@property="v:initialReleaseDate"]/text()') # print(content1[0]) for i in range(1, len(sys.argv)): url = sys.argv[i] page = get_page(url) html = etree.HTML(page) #print(page) content1 = html.xpath('//span[@property="v:runtime"]/text()') s = re.findall("\d+", content1[0])[0] print(s) #class ="ipc-metadata-list-item__content-container" > < !-- --> < !-- --> < !-- --> < !-- --> < !-- --> < !-- -->1 hour 21 minutes < / div > #content1 = html.xpath('.//div[@class="ipc-metadata-list-item__content-container"]/text()') #print(content1) # if(content1[0]==""): # # content1 = html.xpath('//span[@property="v:runtime"]/text()') # # str=content1[0][0:10] # # print(str) # #用正則表示式只取數字 # s=re.findall("\d+", content1[0])[0] # print(s)
java 會獲取到python 本該輸出在控制檯的值,所以這個print裡面的值就會被java獲取到,然後根據這個補充的值進行操作。
但是我在最資料爬取的時候遇到很多問題,剛開始我看到有人說有豆瓣api,可以輸入名稱返回相關結果,結果我搞了將近兩個小時發現,這些全部都過期了
然後我就在豆瓣搜尋,根據搜尋的結果來獲取資料,我就這樣測試了好久,然後發現一直獲取到空值,我以為是我的解析語句有問題,直到我發現我獲取到的page也就是html檔案裡面根本就沒有哪個部分資料,連標籤都沒有,我就懵了,然後去搜說是動態載入的。這個我就完全解析不了了。於是我選擇爬取相應的靜態頁面。
學習時間:14:12到22:44