.text 在 BeautifulSoup 中被数字和特殊键打乱
Posted
技术标签:
【中文标题】.text 在 BeautifulSoup 中被数字和特殊键打乱【英文标题】:.text is scrambled with numbers and special keys in BeautifuSoup 【发布时间】:2018-08-27 12:53:38 【问题描述】:您好,我目前正在使用 Python 3、BeautifulSoup 4,并且请求从supremenewyork.com UK 抓取一些信息。我已经在脚本中实现了一个代理脚本(我知道它有效)。唯一的问题是这个网站不喜欢自动抓取这些信息的程序,所以他们决定打乱这个脚本,我认为这使它无法作为文本使用。
我的问题:有没有办法在不使用 .text
的情况下获取文本和/或有没有办法让脚本读取文本?当它看到像#
这样的特殊字符时跳过它或在看到&
时阅读文本时跳过直到看到;
?
因为基本上这个网站是如何打乱文本的。这是一个示例,当您检查元素时显示的文本是:
supremetshirt
应该说“至高无上的T恤”等等(你明白了,他们不使用字母来打乱数字和特殊键)
当您在 UK Supreme 网站上使用 *** 检查元素时,此
会自动在框中突出显示,并且与文本不同(根本没有突出显示)。每当我在本地 supremenewyork.com 上运行没有代理代码的脚本时,它都可以正常工作(但只是因为代码,而不是在我的本地网站上被打乱,我想从英国网站上提取此信息)有什么想法吗?这是我的代码:
import requests
from bs4 import BeautifulSoup
categorys = ['jackets', 'shirts', 'tops_sweaters', 'sweatshirts', 'pants', 'shorts', 't-shirts', 'hats', 'bags', 'accessories', 'shoes', 'skate']
catNumb = 0
#use new proxy every so often for testing (will add something that pulls proxys and usses them for you.
UK_Proxy1 = '51.143.153.167:80'
proxies =
'http': 'http://' + UK_Proxy1 + '',
'https': 'https://' + UK_Proxy1 + '',
for cat in categorys:
catStr = str(categorys[catNumb])
cUrl = 'http://www.supremenewyork.com/shop/all/' + catStr
proxy_script = requests.get(cUrl, proxies=proxies).text
bSoup = BeautifulSoup(proxy_script, 'lxml')
print('\n*******************"'+ catStr.upper() + '"*******************\n')
catNumb += 1
for item in bSoup.find_all('div', class_='inner-article'):
url = item.a['href']
alt = item.find('img')['alt']
req = requests.get('http://www.supremenewyork.com' + url)
item_soup = BeautifulSoup(req.text, 'lxml')
name = item_soup.find('h1', itemprop='name').text
#name = item_soup.find('h1', itemprop='name')
style = item_soup.find('p', itemprop='model').text
#style = item_soup.find('p', itemprop='model')
print (alt +(' --- ')+ name +(' --- ')+ style)
#print(alt)
#print(str(name))
#print (str(style))
当我运行这个脚本时,我得到了这个错误:
name = item_soup.find('h1', itemprop='name').text AttributeError: 'NoneType' 对象没有属性 'text'
所以我所做的是我对上面带有哈希标记的内容进行了哈希标记,并对其他相似但不同的内容进行哈希标记,我得到了某种str
错误,所以我尝试了print(str(name))
。我可以很好地打印 alt(对于每个脚本,alt 都不会被打乱),但是在打印名称和样式时,它打印的只是在每个 alt 代码下打印的 None
。
我这几天一直在努力解决这个问题,但没有提出任何解决方案。谁能帮我解决这个问题?
【问题讨论】:
【参考方案1】:我已经使用这个解决方案解决了我自己的答案:
thetable = soup5.find('div', class_='turbolink_scroller')
items = thetable.find_all('div', class_='inner-article')
for item in items:
alt = item.find('img')['alt']
name = item.h1.a.text
color = item.p.a.text
print(alt,' --- ', name, ' --- ',color)
【讨论】:
以上是关于.text 在 BeautifulSoup 中被数字和特殊键打乱的主要内容,如果未能解决你的问题,请参考以下文章
.string 和 .text BeautifulSoup 之间的区别
beautifulsoup .get_text() 对我的 HTML 解析不够具体
BeautifulSoup .text 方法返回不带分隔符的文本(\n、\r 等)