The actual problem is that the cell value is not always Socket , sometimes it is surrounded by tabs or spaces. Instead of checking for exact text matches, pass a compiled regex pattern :
import re soup.find(text=re.compile('Socket')).find_next('dd').get_text(strip=True)
Always prints 1150 .
Explaining this word βsometimesβ that I used (thanks @carpetsmoker for the original sentence in the comments):
if you open the page, then clear the cookies and refresh the page, you can see two different views of the same page:


As you can see, the blocks on the page are arranged differently. Therefore, the same page has two different types and the HTML source - what you see is AB-testing :
In marketing and business analytics, A / B testing is jargon for a randomized experiment with two options: A and B, which are controls and treatments in a controlled experiment. This is a form of testing a statistical hypothesis with two options leading to a technical term, testing a hypothesis with two samples, used in the field of statistics.
In other words, they experiment with the product page and collect statistics such as click speed, number of sales made, etc.
FYI, here is the working code that I have at the moment:
import re from bs4 import BeautifulSoup import requests session = requests.Session() headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36'} session.get('http://www.computerstore.nl', headers=headers) response = session.get('http://www.computerstore.nl/product/470130/category-208983/asrock-z97-extreme6.html', headers=headers) soup = BeautifulSoup(response.content) print(soup.find(text=re.compile('Socket')).find_next('dd').get_text(strip=True))