目前正在为产品抓取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上,而不是本地机器上
答案 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协议的一部分。服务器中没有进行验证。请注意,您指定的标题将决定您的请求将如何显示,即较旧的代理可能不包含您期望的所有信息