30/09/2018, 23:33

Giúp đỡ code python

import re
import urllib
url = 'http://news.legacyvn.com'
link_list = []
url_pattern = (r'(?x)((href)="/(w+[:.]?){2,}(/?|[^ 

"']+[w/!?.=#])(?=[s.,>)"']]))')
try:
  page = urllib.urlopen(url).read()
  link_list = re.findall(url_pattern, page)
except Exception, e:
  print e

for link in link_list:
   urlst =  link[0].replace('href="', url)
   print 'Checking:', urlst, '...', 
   try:
       page = urllib.urlopen(urlst).read()
       print 'OK!'
   except IOError, e:
       print 'PROBLEM:', e
link_list2 = []
url_pattern2 = (r'(?x)((src)="/(w+[:.]?){2,}(/?|[^ 

"']+[w/!?.=#])(?=[s.,>)"']]))')
try:
  page = urllib.urlopen(url).read()
  link_list2 = re.findall(url_pattern2, page)
except Exception, e:
  print e

for link2 in link_list2:
   urlst2 =  link2[0].replace('src="', url)
   print urlst2
   try:
       page = urllib.urlopen(urlst2).read()
       print 'OK!'
   except IOError, e:
       print 'PROBLEM:', e

Em muốn check toàn bộ link trong web trên nhưng code trên chỉ check được trang chủ. Mọi người giúp e với ạ

Hưng Lê viết 01:35 ngày 01/10/2018

Code trên của bạn chỉ lấy được link từ một link cho trước thôi. Muốn lấy tất cả các link trên web đó thì bạn làm như sau:

1. Push link trang chủ vào queue Q, đánh dấu đã duyệt link này
2. While (Q not empty):
  1. Pop 1 link ra khỏi Q (gọi là L)
  2. Lấy nội dung html từ link L
  3. Lọc ra tất cả các link từ html của L, tạm gọi là U
  4. Với mỗi U, kiểm tra nếu U chưa duyệt thì lại push U vào queue Q

Đây chỉ là ý tưởng đợn giản. Để tìm hiểu thêm, bạn nên đọc thêm về Web crawler. Hiện cũng có nhiều công cụ hay thư viện hỗ trợ làm việc này (ví dụ như Scrapy cho Python)

Do Ngoc Thanh viết 01:48 ngày 01/10/2018

Em cũng đang học python nên chưa biết nhiều. A có ví dụ mẫu đơn giản nào không ạ

Bài liên quan
0