【问题标题】:Headers, User-Agents, Url Requests in UbuntuUbuntu 中的标头、用户代理和 URL 请求
【发布时间】:2016-12-24 16:58:35
【问题描述】:

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

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)

这个脚本在离开我的电脑时工作得很好,但不确定我会为 ubuntu 指定什么浏览器或用户代理。

代码:

import urllib2
from bs4 import BeautifulSoup
import requests
from lxml import etree
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
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)

soup = BeautifulSoup(page, "lxml")
result = soup.find_all("span", {"class":"availability"})

返回错误码:urllib2.HTTPError: HTTP Error 403: Forbidden 但这只会发生在 Ubuntu 上,不会发生在本地机器上

【问题讨论】:

  • 不建议human的是'Python-urllib/2.1'

标签: python html ubuntu url beautifulsoup


【解决方案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")

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 请查看上面所做的编辑,我收到了urllib2.HTTPError: HTTP Error 403: Forbidden 错误
    • @ColeWorld 一种可能性是您的 IP 可能已被该网站禁止。
    【解决方案3】:

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

    【讨论】:

    • 出现错误...urllib2.HTTPError: HTTP Error 403: Forbidden Ubuntu 在运行代码时返回该错误:import urllib2 from bs4 import BeautifulSoup import requests from lxml import etree import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText 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)
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2016-03-03
    • 2016-03-04
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-16
    相关资源
    最近更新 更多