[Help] cần lấy cái link img ở python

Discussion in 'Linux - PHP - Python - C# - Java' started by grayhatvn, Dec 1, 2018.

Tags:
  1. grayhatvn

    grayhatvn Bang Chúng

    Có đoạn html này
    Giờ muốn lấy cái link " http :// media.doisongphapluat . com/508/2016/12/13/ngoc-trinh-gia-bao-doisongphapluat.jpg" mà ko lấy đc, anh em đi ngang qua ném cho vài cục gạch :D
     
  2. money

    money Hương Chủ

  3. Dung Le

    Dung Le Sơ Nhập Giang Hồ

    {brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}{brick}

    Không giúp gì được bác , xin giúp ít gạch .
     
  4. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Xài RE nhé
    Code:
    ou\":\"(.*?)\",\"ow
     
  5. thitgaluoc

    thitgaluoc Hương Chủ

    bác code bằng python à? cách safe nhất là biến nó thành dict nhé, ở đây em bỏ tag ra bằng cách cắt string, bác có thể dùng thằng html parser nào đó cũng đc
    Code:
    import ast
    
    sample = """<div class="rg_meta notranslate">{"cb":21,"cl":21,"clt":"n","cr":9,"id":"CW-PoOGLdjoQfM:","isu":"doisongphapluat . com","itg":0,"ity":"jpg","oh":900,"ou":"http :// media.doisongphapluat . com/508/2016/12/13/ngoc-trinh-gia-bao-doisongphapluat.jpg","ow":600,"pt":"Ngọc Trinh: \"Gu của tôi là những người đàn ông lớn tuổi\"","rh":"doisongphapluat . com","rid":"W7kPaHC2MUIUJM","rt":0,"ru":"http :// www.doisongphapluat . com/giai-tri/nguoi-trong-cuoc/ngoc-trinh-gu-cua-toi-la-nhung-nguoi-dan-ong-lon-tuoi-a173895.html","s":"","sc":1,"st":"Đời sống pháp luật","th":275,"tu":"https :// encrypted-tbn0.gstatic . com/images?q\u003dtbn:ANd9GcSNYNcOG1YFxw0RKWm8ckObqfR9C2U5XGjAPCfugnTftlZtlblp0A","tw":183}</div>"""
    
    sample_without_div = sample[32:-6] #String slicing, easiest way to strip tags
    
    sample_dict = ast.literal_eval(sample_without_div)
    
    link = sample_dict.get('ru')
    
    
     
    grayhatvn likes this.
  6. grayhatvn

    grayhatvn Bang Chúng

    Thank mấy bác
    Mình mới mò mò python thôi, nên chỉ là amater nhiều lúc viết miễn sao đạt đc mục đích chứ cũng ko hiểu cú pháp lệnh :D, cái thư viện ast này chưa xài lần nào nên nhìn cũng không hiểu lắm, nên giải pháp bác @thichgaluoc nhìn không hiểu lắm :D

    Giải pháp bác @Hoa Mãn Lâu mình cũng hay dùng cái re này, nhưng ko hiểu sao viết cứ lỗi hoài, nếu không lỗi thì nó toàn trả về None ko à :( hay là bác viết giúp code luôn đc ko vậy :D, thank bác
     
  7. Trần Trọng Bách

    Trần Trọng Bách Sơ Nhập Giang Hồ

    Bạn có thể dùng split, cắt đoạn ou và ow đi, mình thấy dễ dùng hơn regx
    Code:
    data = """{"cb":21,"cl":21,"clt":"n","cr":9,"id":"CW-PoOGLdjoQfM:","isu":"doisongphapluat . com","itg":0,"ity":"jpg","oh":900,"ou":"http :// media.doisongphapluat . com/508/2016/12/13/ngoc-trinh-gia-bao-doisongphapluat.jpg","ow":600,"pt":"Ngọc Trinh: \"Gu của tôi là những người đàn ông lớn tuổi\"","rh":"doisongphapluat . com","rid":"W7kPaHC2MUIUJM","rt":0,"ru":"http :// www.doisongphapluat . com/giai-tri/nguoi-trong-cuoc/ngoc-trinh-gu-cua-toi-la-nhung-nguoi-dan-ong-lon-tuoi-a173895.html","s":"","sc":1,"st":"Đời sống pháp luật","th":275,"tu":"https :// encrypted-tbn0.gstatic . com/images?q\u003dtbn:ANd9GcSNYNcOG1YFxw0RKWm8ckObqfR9C2U5XGjAPCfugnTftlZtlblp0A","tw":183}"""
    content = data.split('"ou":"')[1].split('","ow"')[0]
    print(content)
    code trên là:
    split để chia đoạn data thành nhiều phần
    từ "ou":" và lấy phần [1] ( sau "ou":" )
    rồi chia tiếp từ ","ow" lấy phần [0] (trước ","ow")
     
  8. thitgaluoc

    thitgaluoc Hương Chủ

    đơn giản thôi bác, cái trong thẻ div của bác là 1 cái dictionary của python, nhưng nó đang ở dạng text (string) chứ không phải là dict, hàm ast.literal_eval có công dụng thử và biến nó thành dictionary để bác có thể truy xuất dữ liệu từ nó.
    Ví dụ này cho dễ hiểu :
    Em có string123 = '123', em muốn nó trở thành kiểu integer thì type(ast.literal_eval(string123)) = int còn type(string123) = str

    Regex cho bác nhé
    https://regex101.com/r/xMeNSc/1
     
  9. grayhatvn

    grayhatvn Bang Chúng

    Mình dùng cách này lấy được nè, nhưng khổ nỗi không lấy được hết đưa vô lấy all là bị lỗi, link: " https ://killref.com/get_img.html đây là đoạn html " mình bóc ra hết mấy cái không cần thiết rồi giờ cần lấy toàn bộ img trong thẻ <div class="rg_meta notranslate"> bác giúp thêm đoạn này với :D
     
  10. grayhatvn

    grayhatvn Bang Chúng

    Ghép vô chạy mà nó lọc ko ra bác galuoc nhỉ
    Code:
            
            _img_google =soup.select('div.rg_meta.notranslate')
            sample_without_div = _img_google[32:-6]
            sample_dict = ast.literal_eval(sample_without_div)
            link = sample_dict.get('ru')
            print(link)
     
  11. grayhatvn

    grayhatvn Bang Chúng

     
  12. Trần Trọng Bách

    Trần Trọng Bách Sơ Nhập Giang Hồ

    Bạn muốn bóc lấy link từ đoạn code trong thẻ <div class="rg_meta notranslate">, hay bóc từ cả cái html đấy?
     
  13. thitgaluoc

    thitgaluoc Hương Chủ

    Thôi tặng bác cái regex cho nhanh
    Code:
    import re
    
    _img_google =soup.select('div.rg_meta.notranslate')
    
    _img_google_without_div = _img_google.text[33:-6]
    
    linkmatch = re.compile(r'\"ru\":\"(http.+?|https.+?)\",\"')
    
    regex_matches = linkmatch.search(_img_google_without_div)
    
    stripped_link = regex_matches.group(1)
    
    print(stripped_link)
    
    btw đoạn trong tag là content của 1 file json, nếu bác bắt đc cái request đấy thì request thẳng đến nó rồi json.loads(XXX) nhàn hơn là bóc html thế này
     
    grayhatvn likes this.
  14. grayhatvn

    grayhatvn Bang Chúng

    Mục đích cuối cùng của mình là muốn lấy toàn bộ các link image nằm trong ou và ow đó
     
  15. Trần Trọng Bách

    Trần Trọng Bách Sơ Nhập Giang Hồ

    Ý mình là đầu vào của bạn là chỉ đoạn code nằm trong thẻ div, hay là cả trang html như bạn gửi và cần bóc tách ra đoạn link trong thẻ div đó?
     
  16. grayhatvn

    grayhatvn Bang Chúng

    cả trang html mình gửi đó
     
  17. grayhatvn

    grayhatvn Bang Chúng

    Chạy bị báo lỗi này không fix đc bác @thigaluoc , bác xem giúp với :D
    Code:
    C:\crawl\uxfree>python fuck.py
    Traceback (most recent call last):
      File "fuck.py", line 124, in <module>
        print(_content('https://killref.com/get_img.html'))
      File "fuck.py", line 30, in _content
        _img_google_without_div = _img_google.text[33:-6]
    AttributeError: 'list' object has no attribute 'text'
     
  18. thitgaluoc

    thitgaluoc Hương Chủ

    soup.select() trả về list chứ không phải là BeautifulSoup.Tag bác ơi, bác thay soup.select() bằng soup.select_one() nhé, có gì inbox :D
     
  19. Trần Trọng Bách

    Trần Trọng Bách Sơ Nhập Giang Hồ

    Code:
    from bs4 import BeautifulSoup  # pip install beautifulsoup4
    
    soup = BeautifulSoup(html, "html.parser")
    _img_google =soup.select('div.rg_meta.notranslate')
    for abc in _img_google:
        try:
            _slipt  = abc.get_text().split('"ou":')[1].split(',"ow"')[0].strip()
            print(_slipt)
        except:
            print("Error: ")
            print(abc.get_text())
    Bạn dùng code trên nhé
     
  20. automan

    automan Hương Chủ