soup.find(class_ =“”)不适用于加密站点

时间:2019-08-10 20:39:15

标签: python web-scraping beautifulsoup

我正在尝试抓取Ksl。由于他们的网站已加密,因此我必须正常使用Mozilla对其进行抓取。这是我到目前为止所拥有的

import urllib.request
import bs4 as bs

class AppURLopener(urllib.request.FancyURLopener):
version = "Mozilla/5.0"

opener = AppURLopener()
sauce = opener.open("https://classifieds.ksl.com/search?category[]=&subCategory[]=&keyword=piano&priceFrom=&priceTo=&zip=&miles=25&sellerType[]=&marketType[]=Sale&hasPhotos[]=&postedTime[]=").read()
soup = bs.BeautifulSoup(sauce, 'lxml')
print(soup.find(class_="listing-item"))

当我使用soup.find(class_="")按班级搜索时 什么也没发生,但是当我使用soup.find(id="")soup.find("div")之类的东西时,一切正常。

我过去曾经使用过beautifulsoup,并且与过去使用的代码不同,此代码中唯一的不同是Ksl的网络加密。

如果有人有解决方案,将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果不使用任何浏览器模拟器,则需要使用标题来访问该页面的内容。此外,您感兴趣的内容是用javascript加密的。但是,所需的内容在该页面的某些脚本标记中可用,因此您可以使用requests模块以及rehjson库来获取它们。如果您不想参加urllib,也可以坚持使用requests模块。

import re
import hjson
import requests

url = "https://classifieds.ksl.com/search?category[]=&subCategory[]=&keyword=piano&priceFrom=&priceTo=&zip=&miles=25&sellerType[]=&marketType[]=Sale&hasPhotos[]=&postedTime[]="

res = requests.get(url,headers={"User-Agent":"Mozilla/5.0"})
items = hjson.loads(re.findall(r"window.renderSearchSection\(([\s\S]*?)\)</",res.text)[0])
for item in items['listings']:
    name = item['title']
    price = item['price']
    print(name,price)

输出部分类似:

PIANO TUNER GOING OUT OF BUSINESS 1
Brodmann PE-187 Grand Piano 12500
Player piano 250
Antique Claw Foot Piano Stool (Doesn't Spin) 60
Free Player Piano 0
Baldwin Studio Piano with Bench and Music Books 375
Excellent condition  Brodmann electric piano 200
Casio Privia px-760 Piano/Keyboard 500