python - Error HTTP 999: solicitud denegada
web-scraping beautifulsoup (2)
Estoy tratando de raspar algunas páginas web de LinkedIn usando BeautifulSoup y sigo recibiendo el error "HTTP Error 999: Solicitud denegada". ¿Hay alguna forma de evitar este error? Si miras mi código, he intentado Mechanize y URLLIB2 y ambos me están dando el mismo error.
from __future__ import unicode_literals
from bs4 import BeautifulSoup
import urllib2
import csv
import os
import re
import requests
import pandas as pd
import urlparse
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup
from BeautifulSoup import BeautifulStoneSoup
import urllib
import urlparse
import pdb
import codecs
from BeautifulSoup import UnicodeDammit
import codecs
import webbrowser
from urlgrabber import urlopen
from urlgrabber.grabber import URLGrabber
import mechanize
fout5 = codecs.open(''data.csv'',''r'', encoding=''utf-8'', errors=''replace'')
for y in range(2,10,1):
url = "https://www.linkedin.com/job/analytics-%2b-data-jobs-united-kingdom/?sort=relevance&page_num=1"
params = {''page_num'':y}
url_parts = list(urlparse.urlparse(url))
query = dict(urlparse.parse_qsl(url_parts[4]))
query.update(params)
url_parts[4] = urllib.urlencode(query)
y = urlparse.urlunparse(url_parts)
#print y
#url = urllib2.urlopen(y)
#f = urllib2.urlopen(y)
op = mechanize.Browser() # use mecahnize''s browser
op.set_handle_robots(False) #tell the webpage you''re not a robot
j = op.open(y)
#print op.title()
#g = URLGrabber()
#data = g.urlread(y)
#data = fo.read()
#print data
#html = response.read()
soup1 = BeautifulSoup(y)
print soup1
Debería utilizar la API de REST de LinkedIn , ya sea directamente o utilizando python-linkedin
. Permite el acceso directo a los datos, en lugar de intentar raspar el sitio web pesado de JavaScript.
Intenta configurar el encabezado User-Agent
. Agregue esta línea después de op.set_handle_robots(False)
op.addheaders = [(''User-Agent'': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36")]
Editar: si desea raspar sitios web, primero compruebe si tiene API o biblioteca, que trata con API.