1. 程式人生 > 其它 >12月13日

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=new
String[]{"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