2015-09-23 17 views
10

Tôi đang thực hiện việc cào web bằng cách sử dụng trình quản trị web selenium bằng Python với Proxy.Trình Duyệt Web Selenium/Beautifulsoup + Lỗi Web + Lỗi 416

Tôi muốn duyệt qua hơn 10 nghìn trang của một trang web bằng cách sử dụng thao tác cạo này.

Vấn đề đang sử dụng proxy này Tôi có thể gửi yêu cầu chỉ một lần. khi tôi gửi một yêu cầu khác trên cùng một liên kết hoặc liên kết khác của trang web này, tôi nhận được lỗi 416 (loại IP chặn sử dụng tường lửa) trong 1-2 giờ.

Lưu ý: Tôi có thể xóa tất cả các trang web thông thường bằng mã này, nhưng trang web này có loại bảo mật ngăn tôi cạo.

Đây là mã.

profile = webdriver.FirefoxProfile() 
profile.set_preference("network.proxy.type", 1) 
profile.set_preference(
       "network.proxy.http", "74.73.148.42") 
profile.set_preference("network.proxy.http_port", 3128) 
profile.update_preferences() 
browser = webdriver.Firefox(firefox_profile=profile) 
browser.get('http://www.example.com/') 
time.sleep(5) 
element = browser.find_elements_by_css_selector(
       '.well-sm:not(.mbn) .row .col-md-4 ul .fs-small a') 
for ele in element: 
    print ele.get_attribute('href') 
browser.quit() 

Bất kỳ giải pháp nào ??

Trả lời

5

Selenium là không hữu ích đối với tôi, vì vậy tôi giải quyết vấn đề bằng cách sử dụng beautifulsoup, trang web đã sử dụng an ninh để ngăn chặn Proxy bất cứ khi nào nhận được yêu cầu, vì vậy tôi đang thay đổi liên tục proxyurlUser-Agent bất cứ khi nào máy chủ chặn Proxy yêu cầu.

Tôi đang dán mã của tôi ở đây

from bs4 import BeautifulSoup 
import requests 
import urllib2 

url = 'http://terriblewebsite.com/' 

proxy = urllib2.ProxyHandler({'http': '130.0.89.75:8080'}) 

# Create an URL opener utilizing proxy 
opener = urllib2.build_opener(proxy) 
urllib2.install_opener(opener) 
request = urllib2.Request(url) 
request.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.15) Gecko/20110303 Firefox/3.6.15') 
result = urllib2.urlopen(request) 
data = result.read() 
soup = BeautifulSoup(data, 'html.parser') 
ptag = soup.find('p', {'class', 'text-primary'}).text 
print ptag 

Lưu ý:

  1. thay đổi proxy và User-Agent và sử dụng mới nhất được cập nhật Proxy chỉ

  2. vài máy chủ chỉ chấp nhận proxy quốc gia cụ thể, Trong trường hợp của tôi, tôi đã sử dụng Proxy từ United Sta tes

quá trình này có thể là một chậm, u vẫn có thể loại bỏ các dữ liệu

1

Đi qua 416 lỗi trong các liên kết sau, có vẻ như một số thông tin được lưu trong bộ nhớ cache (cookie có thể) đang tạo ra sự cố. Bạn có thể gửi yêu cầu lần đầu tiên và các yêu cầu gửi tiếp theo không thành công.

https://webmasters.stackexchange.com/questions/17300/what-are-the-causes-of-a-416-error 416 Requested Range Not Satisfiable

Hãy thử lựa chọn không để lưu các tập tin cookie bằng cách thiết lập một sở thích hoặc xóa cookie sau mỗi lần gửi yêu cầu.

profile.set_preference("network.cookie.cookieBehavior", 2); 
Các vấn đề liên quan