30/09/2018, 20:10

Lấy nội dung bài viết từ url trong Python

Giả sử mình có 1 url sau khi lấy được html rồi mình muốn lấy nội dung trong thẻ <div id="divNewsContent"> ra thì làm thế nào mình dùng Python

Ngô Doãn Tuấn viết 22:20 ngày 30/09/2018

@thanhmssl10
Giúp bạn ấy đi kìa

Minh Hoàng viết 22:10 ngày 30/09/2018

Bạn có thể dùng beautifulsoup hoặc regex

Khôi Trần viết 22:16 ngày 30/09/2018

Mình đã thử dùng re nhưng ko thành ban xem html của trang rồi bày giúp m được ko

Thành Phạm viết 22:16 ngày 30/09/2018

Nên dùng Beautiful soup hoặc các html parser tương tự bạn ạ, regex thì trừ khi dùng cho biết cách dùng chứ nên tránh

@TheSky Thời này ai dùng lib nữa, phải chơi find xong cắt chuỗi mới gọi là pro

Khôi Trần viết 22:18 ngày 30/09/2018

việc find và cắt thì mình hoàn toàn có thể làm đk :), còn cái bs4 bạn xem cái html của trang rồi cho m đoan code lấy content được không :((

Thành Phạm viết 22:14 ngày 30/09/2018

Mình troll vui thôi bạn chứ ai dùng vậy

Ngô Doãn Tuấn viết 22:16 ngày 30/09/2018

@JuniorK Beautiful soup bạn dùng thử cái này xem thế nào đi Đôi khi phân vân quá cũng không hay đâu.
Còn cách[quote=“JuniorK, post:6, topic:23135”]
find và cắt
[/quote]

Thì chỉ có @thanhmssl10 thần thánh mới làm được thôi

Thành Phạm viết 22:25 ngày 30/09/2018

Kiểu như này này:


In [11]: r = s.get('http://dantri.com.vn/the-gioi/khong-tac-khong-che-may-bay-ai-cap-vi-muon-gui-thu-cho-vo-cu-2016032915181413.htm')

In [12]: soup = BeautifulSoup(r.text, 'html.parser')
In [13]: result = soup.select(".fon31.mgb15")
In [14]: result[0]
Out[14]: <h1 class="fon31 mgb15">\r\n    Kh\xf4ng t\u1eb7c kh\u1ed1ng ch\u1ebf m\xe1y bay Ai C\u1eadp v\xec mu\u1ed1n g\u1eedi th\u01b0 cho v\u1ee3 c\u0169</h1>


Khôi Trần viết 22:12 ngày 30/09/2018

cảm ơn bạn mình đã lấy đk nội dung của thẻ divNewsContent giờ chỉ clear html là xong

htl@PyMI.vn viết 22:21 ngày 30/09/2018

Thêm .text là xong

Thành Phạm viết 22:20 ngày 30/09/2018

À chuẩn rồi u , bạn thêm cái .text là sẽ lấy được phần text bên trong

In [22]: soup.select(".fon31.mgb15")[0].text
Out[22]: u'\r\n    Kh\xf4ng t\u1eb7c kh\u1ed1ng ch\u1ebf m\xe1y bay Ai C\u1eadp v\xec mu\u1ed1n g\u1eedi th\u01b0 cho v\u1ee3 c\u0169'
Chiến Minh Nguyễn viết 22:14 ngày 30/09/2018

response = requests.get(url) parsed_body = html.fromstring(response.text) check = parsed_body.xpath('//div[@id="divNewsContent"]/h1/text()')

mình dùng cái cách này cơ mà thỉnh thoảng không lấy được thì phải

Cường Nv viết 22:13 ngày 30/09/2018

cho e hỏi thêm là nếu muốn lấy nội dung bài báo đó thì làm ntn ạ , e mới tìm hiểu , thanks

HK boy viết 22:17 ngày 30/09/2018

Cái này bạn phải xem cấu trúc file HTML của trang như thế nào nhé. Ví dụ như tag/class nào quy định title, cái nào quy định nội dung,…

Có thư viện html.parser để lấy parse nội dung từ 1 file html hoàn chỉnh.

Cường Nv viết 22:13 ngày 30/09/2018

tại m của cũng chỉ biết sơ sơ html nên chưa rõ , bạn có thể vd thêm đc k vậy , vd như lấy nd bài báo này http://dantri.com.vn/the-gioi/lo-bay-no-myanmar-thu-hep-du-an-cang-7-ty-usd-voi-trung-quoc-20180802211534508.htm

HK boy viết 22:12 ngày 30/09/2018

Mở trên trình duyệt:

view-source:http://dantri.com.vn/the-gioi/lo-bay-no-myanmar-thu-hep-du-an-cang-7-ty-usd-voi-trung-quoc-20180802211534508.htm

  • Gõ nội dung title vào để xem nó ở đâu.
  • Gõ tiếp từ 3 chữ đầu của phần chữ xám xem ở đâu.
  • Tiếp 2 link dưới
  • Tiếp nội dung.

Kết luận các format:

Title:

<h1 class="fon31 mgb15">
    {title}</h1>

Phần ngay dưới:

<h2 class="fon33 mt1 sapo">
    <span>Dân trí</span> {summary}<br /><a href={link1} title={linktitle1}><b>&nbsp;&gt;&gt;&nbsp;{title1}</b></a><br /><a href={link2} title={linktitle2}><b>&nbsp;&gt;&gt;&nbsp;{title2}</b></a>
</h2>

Các phần sau tự làm tương tự.

Cường Nv viết 22:23 ngày 30/09/2018

tuyệt , cảm ơn HK boy

Bài liên quan
0