python-如何从aspx页面抓取图像?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-如何从aspx页面抓取图像?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4059字,纯文字阅读大概需要6分钟。
内容图文
![python-如何从aspx页面抓取图像?](/upload/InfoBanner/zyjiaocheng/665/27aa322b42944d458f8b487495dc44fd.jpg)
我正在尝试从aspx页面上抓取图像,我有这段代码可以从普通网页上抓取图像,但是无法抓取aspx页面,原因是我需要将http发布请求发送至aspx页面,我什至不知道该怎么做看完几个线程后,这是原始代码
from bs4 import BeautifulSoup as bs
import urlparse
import urllib2
from urllib import urlretrieve
import os
import sys
import subprocess
import re
def thefunc(url, out_folder):
c = False
我已经为aspx页面和if语句定义了标头,以区分普通页面和aspx页面
select = raw_input('Is this a .net aspx page ? y/n : ')
if select.lower().startswith('y'):
usin = raw_input('Specify origin of .net page : ')
usaspx = raw_input('Specify aspx page url : ')
aspx页面的标题
headdic = {
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Origin': usin,
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17',
'Content-Type': 'application/x-www-form-urlencoded',
'Referer': usaspx,
'Accept-Encoding': 'gzip,deflate,sdch',
'Accept-Language': 'en-US,en;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3'
}
c = True
if c:
req = urllib2.Request(url, headers=headic)
else:
req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"})
resp = urllib2.urlopen(req)
soup = bs(resp, 'lxml')
parsed = list(urlparse.urlparse(url))
print '\n',len(soup.findAll('img')), 'images are about to be downloaded'
for image in soup.findAll("img"):
print "Image: %(src)s" % image
filename = image["src"].split("/")[-1]
parsed[2] = image["src"]
outpath = os.path.join(out_folder, filename)
try:
if image["src"].lower().startswith("http"):
urlretrieve(image["src"], outpath)
else:
urlretrieve(urlparse.urlunparse(parsed), outpath)
except:
print 'OOPS missed one for some reason !!'
pass
try:
put = raw_input('Please enter the page url : ')
reg1 = re.compile('^http*',re.IGNORECASE)
reg1.match(put)
except:
print('Type the url carefully !!')
sys.exit()
fol = raw_input('Enter the foldername to save the images : ')
if os.path.isdir(fol):
thefunc(put, fol)
else:
subprocess.call('mkdir', fol)
thefunc(put, fol)
我对aspx检测和为aspx页面创建标题做了一些修改,但是接下来如何修改我被困在这里
***这是aspx页面链接*** http://www.foxrun.com.au/Products/Cylinders_with_Gadgets.aspx
抱歉,如果我不清楚,您可以看到我是编程的新手,我要问的问题是,当我单击浏览器中的下一页按钮时,如何从aspx页面获取图像?刮掉一页导致URL保持不变,除非我以某种方式发送http帖子告诉该页面显示带有新图片的下一页,因为url保持不变我希望我清楚
解决方法:
您可以使用请求来完成此任务,方法是将具有正确数据的数据发布到url,该数据可以从初始页面解析:
import requests
from bs4 import BeautifulSoup
from urlparse import urljoin
from itertools import chain
url = "http://www.foxrun.com.au/Products/Cylinders_with_Gadgets.aspx"
def validate(soup):
return {"__VIEWSTATE": soup.select_one("#__VIEWSTATE")["value"],
"__VIEWSTATEGENERATOR": soup.select_one("#__VIEWSTATEGENERATOR")["value"],
"__EVENTVALIDATION": soup.select_one("#__EVENTVALIDATION")["value"]}
def parse(base, url):
data = {"__ASYNCPOST": "true"
}
h = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17'}
soup = BeautifulSoup(requests.get(url).text)
data.update(validate(soup))
# gets links for < 1,2,3,4,5,6>
pages = [a["id"] for a in soup.select("a[id^=ctl01_ctl00_pbsc1_pbPagerBottom_btnP]")][2:]
# get images from initial page
yield [img["src"] for img in soup.select("img")]
# add token for post
data.update(validate(soup))
for p in pages:
# we need $in place of _ for the form data
data["__EVENTTARGET"] = p.replace("_", "$")
data["RadScriptManager1"] = "ctl01$ctl00$pbsc1$ctl01$ctl00$pbsc1$ajaxPanel1Panel|{}".format(p.replace("_", "$"))
r = requests.post(url, data=data, headers=h).text
soup = BeautifulSoup(r)
yield [urljoin(base, img["src"]) for img in soup.select("img")]
for url in chain.from_iterable(parse("http://www.foxrun.com.au/", url)):
print(url)
这将为您提供链接,您只需下载内容并将其写入文件即可.通常,我们可以创建一个Session并从一页转到下一页,但是在这种情况下,发布的内容是ctl01 $ctl00 $pbsc1 $pbPagerBottom $btnNext,从初始页到第二页都可以正常工作,但是没有概念从第二个到第三个等等.因为我们在表单数据中没有页码.
内容总结
以上是互联网集市为您收集整理的python-如何从aspx页面抓取图像?全部内容,希望文章能够帮你解决python-如何从aspx页面抓取图像?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。