Ubuntu中的标头,用户代理,URL请求

时间:2016-12-24 16:58:35

标签: python html ubuntu url beautifulsoup

目前正在为产品抓取LINK,在ubuntu服务器上部署我的脚本。此站点要求您指定User-Agent和url标头相关的内容。当我使用Ubuntu并连接到Ubuntu上的代理服务器时,我的" hdr"变量在这个脚本中:

select u.user_name, sum(r.goals) total_goals, round(sum(r.goals)/(2 * count(1)),2) avg_goals 
from (select community_id, player1_id id, player1_goals goals 
from results union all select community_id, player2_id, player2_goals from results) r 
inner join users u on r.id = u.id 
where r.community_id = 16 group by r.id, u.user_name 
ORDER BY avg_goals DESC

此脚本在从我的计算机上运行时效果很好,但不确定我将指定为ubuntu的浏览器或用户代理。

代码:

import urllib2
from bs4 import BeautifulSoup
import requests
from lxml import etree
import smtplib
import urllib2, sys
url = "http://www.sneakersnstuff.com/en/product/22422/adidas-superstar-80s"
hdr = {'User-Agent': 'Mozilla/5.0'}
req = urllib2.Request(url,headers=hdr)
page = urllib2.urlopen(req)

返回错误代码:urllib2.HTTPError:HTTP错误403:禁止 但这只发生在Ubuntu上,而不是本地机器上

3 个答案:

答案 0 :(得分:1)

我不确定整个urllib2的事情,但是如果你只是想在html中获取字符串,那么你在这里输入的东西太多了。对于您提供的网址,以下内容足以删除文字:

from bs4 import BeautifulSoup
import requests

对于user-agent,这取决于您是否希望网站维护者知道您的存在与否,大多数情况下与抓取自身的能力无关。对于某些网站,您可能希望隐藏user-agent某些网站,您可能希望将其明确说明。 对于网址,您提供了以下代码,但没有错误:

from bs4 import BeautifulSoup
import requests
url = "http://www.sneakersnstuff.com/en/product/22422/adidas-superstar-80s"
hdr = {'User-Agent': 'Mozilla/5.0'}

req = requests.Session()

page_raw = req.get(url, headers=hdr)

page_raw.status_code # This was 200

page_raw.encoding = "utf-8" # Just to be sure

page_text = page_raw.text

page_soup = BeautifulSoup(page_text, "lxml")


page_avaliablity = page_soup.find_all("span", class_="availability")

答案 1 :(得分:0)

您不必根据运行脚本的操作系统指定不同的User-Agent字符串。你可以保持原样。

您可以更进一步,开始轮换User-Agent值 - 例如,从fake-useragent的真实世界用户代理列表中随机选择它。

答案 2 :(得分:0)

您可以指定所需的任何代理。标头只是一个字符串,它是协议HTTP协议的一部分。服务器中没有进行验证。请注意,您指定的标题将决定您的请求将如何显示,即较旧的代理可能不包含您期望的所有信息