我有以下代码来抓取这个页面:
soup = BeautifulSoup(html)
result = u''
# Find Starting point
start = soup.find('div', class_='main-content-column')
if start:
news.image_url_list = []
for item in start.find_all('p'):
我面临的问题是它还抓住<p>
内部<div class="type-gallery">
,我想避免这种情况。但找不到实现它的方法。
有什么想法吗?
答案 0 :(得分:2)
你想要直接孩子,而不仅仅是element.find_all()
返回的任何后代。这里最好的选择是使用CSS selector代替:
for item in soup.select('div.main-content-column > div > p'):
>
运算符将此限制为p
个标记,这些标记是具有给定类的div
内div
个标记的直接子节点。你可以根据自己的喜好制作这个;添加itemprop
属性,例如:
for item in soup.select('div.main-content-column > div[itemprop="articleBody"] > p'):
另一种方法是循环遍历element.children
iterable:
start = soup.find('div', class_='main-content-column')
if start:
news.image_url_list = []
for item in start.children:
if item.name != 'div':
# skip children that are not <div> tags
continue
for para in item.children:
if item.name != 'p':
# skip children that are not <p> tags
continue